diff src/event/modules/ngx_iocp_module.c @ 278:0ba4821f4460

nginx-0.0.2-2004-03-04-10:04:55 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 04 Mar 2004 07:04:55 +0000
parents bdd631bf1a1c
children 7c7183b3ea8b
line wrap: on
line diff
--- a/src/event/modules/ngx_iocp_module.c
+++ b/src/event/modules/ngx_iocp_module.c
@@ -1,6 +1,6 @@
 
 /*
- * Copyright (C) 2002-2003 Igor Sysoev, http://sysoev.ru
+ * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
  */
 
 
@@ -10,11 +10,11 @@
 #include <ngx_iocp_module.h>
 
 
-static int ngx_iocp_init(ngx_cycle_t *cycle);
+static ngx_int_t ngx_iocp_init(ngx_cycle_t *cycle);
 static void ngx_iocp_done(ngx_cycle_t *cycle);
-static int ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key);
-static int ngx_iocp_del_connection(ngx_connection_t *c, u_int flags);
-static int ngx_iocp_process_events(ngx_log_t *log);
+static ngx_int_t ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key);
+static ngx_int_t ngx_iocp_del_connection(ngx_connection_t *c, u_int flags);
+static ngx_int_t ngx_iocp_process_events(ngx_log_t *log);
 static void *ngx_iocp_create_conf(ngx_cycle_t *cycle);
 static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf);
 
@@ -89,7 +89,7 @@ ngx_os_io_t ngx_iocp_io = {
 static HANDLE  iocp;
 
 
-static int ngx_iocp_init(ngx_cycle_t *cycle)
+static ngx_int_t ngx_iocp_init(ngx_cycle_t *cycle)
 {
     ngx_iocp_conf_t  *cf;
 
@@ -106,10 +106,6 @@ static int ngx_iocp_init(ngx_cycle_t *cy
         return NGX_ERROR;
     }
 
-    if (ngx_event_timer_init(cycle) == NGX_ERROR) {
-        return NGX_ERROR;
-    }
-
     ngx_io = ngx_iocp_io;
 
     ngx_event_actions = ngx_iocp_module_ctx.actions;
@@ -128,12 +124,10 @@ static void ngx_iocp_done(ngx_cycle_t *c
     }
 
     iocp = NULL;
-
-    ngx_event_timer_done(cycle);
 }
 
 
-static int ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key)
+static ngx_int_t ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key)
 {
     ngx_connection_t  *c;
 
@@ -142,7 +136,8 @@ static int ngx_iocp_add_event(ngx_event_
     c->read->active = 1;
     c->write->active = 1;
 
-    ngx_log_debug(ev->log, "iocp add: %d, %d:%08x" _ c->fd _ key _ &ev->ovlp);
+    ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                   "iocp add: fd:%d k:%d ov:" PTR_FMT, c->fd, key, &ev->ovlp);
 
     if (CreateIoCompletionPort((HANDLE) c->fd, iocp, key, 0) == NULL) {
         ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
@@ -154,7 +149,7 @@ static int ngx_iocp_add_event(ngx_event_
 }
 
 
-static int ngx_iocp_del_connection(ngx_connection_t *c, u_int flags)
+static ngx_int_t ngx_iocp_del_connection(ngx_connection_t *c, u_int flags)
 {
     if (CancelIo((HANDLE) c->fd) == 0) {
         ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno, "CancelIo() failed");
@@ -165,7 +160,7 @@ static int ngx_iocp_del_connection(ngx_c
 }
 
 
-static int ngx_iocp_process_events(ngx_log_t *log)
+static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
 {
     int                rc;
     u_int              key;
@@ -178,23 +173,17 @@ static int ngx_iocp_process_events(ngx_l
     ngx_event_ovlp_t  *ovlp;
 
     timer = ngx_event_find_timer();
+    ngx_old_elapsed_msec = ngx_elapsed_msec;
 
-    if (timer) {
-        ngx_gettimeofday(&tv);
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
-
-    } else {
+    if (timer == 0) {
         timer = INFINITE;
-        delta = 0;
     }
 
-    ngx_log_debug(log, "iocp timer: %d" _ timer);
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp timer: %d", timer);
 
     rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key,
                                    (LPOVERLAPPED *) &ovlp, timer);
 
-    ngx_log_debug(log, "iocp: %d, %d, %d:%08x" _ rc _ bytes _ key _ ovlp);
-
     if (rc == 0) {
         err = ngx_errno;
     } else {
@@ -202,16 +191,13 @@ static int ngx_iocp_process_events(ngx_l
     }
 
     ngx_gettimeofday(&tv);
+    ngx_time_update(tv.tv_sec);
 
-    if (ngx_cached_time != tv.tv_sec) {
-        ngx_cached_time = tv.tv_sec;
-        ngx_time_update();
-    }
+    ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0,
+                   "iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp);
 
-    if (timer != INFINITE) {
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
-        ngx_event_expire_timers((ngx_msec_t) delta);
-    }
+    delta = ngx_elapsed_msec;
+    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
 
     if (err) {
         if (ovlp == NULL) {
@@ -227,12 +213,20 @@ static int ngx_iocp_process_events(ngx_l
         }
     }
 
+    if (timer != INFINITE) {
+        delta = ngx_elapsed_msec - delta;
+
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "iocp timer: %d, delta: %d", timer, (int) delta);
+    }
+
     if (ovlp) {
         ev = ovlp->event;
 
-ngx_log_debug(log, "iocp ev: %08x" _ ev);
+        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp event:" PTR_FMT, ev);
 
         switch (key) {
+
         case NGX_IOCP_ACCEPT:
             if (bytes) {
                 ev->ready = 1;
@@ -250,11 +244,16 @@ ngx_log_debug(log, "iocp ev: %08x" _ ev)
 
         ev->available = bytes;
 
-ngx_log_debug(log, "iocp ev handler: %08x" _ ev->event_handler);
+        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
+                       "iocp event handler: %08x" PTR_FMT, ev->event_handler);
 
         ev->event_handler(ev);
     }
 
+    if (timer != INFINITE && delta) {
+        ngx_event_expire_timers((ngx_msec_t) delta);
+    }
+
     return NGX_OK;
 }