diff src/event/modules/ngx_iocp_module.c @ 114:ac69ab96328d

nginx-0.0.1-2003-07-07-10:11:50 import
author Igor Sysoev <igor@sysoev.ru>
date Mon, 07 Jul 2003 06:11:50 +0000
parents 6dfda4cf5200
children ef8c87afcfc5
line wrap: on
line diff
--- a/src/event/modules/ngx_iocp_module.c
+++ b/src/event/modules/ngx_iocp_module.c
@@ -10,13 +10,13 @@
 #include <ngx_iocp_module.h>
 
 
-static int ngx_iocp_init(ngx_log_t *log);
-static void ngx_iocp_done(ngx_log_t *log);
+static int 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);
 static int ngx_iocp_process_events(ngx_log_t *log);
-static void *ngx_iocp_create_conf(ngx_pool_t *pool);
-static char *ngx_iocp_init_conf(ngx_pool_t *pool, void *conf);
+static void *ngx_iocp_create_conf(ngx_cycle_t *cycle);
+static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf);
 
 
 static ngx_str_t      iocp_name = ngx_string("iocp");
@@ -72,31 +72,37 @@ ngx_module_t  ngx_iocp_module = {
     &ngx_iocp_module_ctx,                  /* module context */
     ngx_iocp_commands,                     /* module directives */
     NGX_EVENT_MODULE,                      /* module type */
-    NULL                                   /* init module */
+    NULL,                                  /* init module */
+    NULL                                   /* init child */
 };
 
 
 static HANDLE  iocp;
 
 
-static int ngx_iocp_init(ngx_log_t *log)
+static int ngx_iocp_init(ngx_cycle_t *cycle)
 {
     ngx_iocp_conf_t  *cf;
 
-    cf = ngx_event_get_conf(ngx_iocp_module);
-
-    iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, cf->threads);
+    cf = ngx_event_get_conf(cycle->conf_ctx, ngx_iocp_module);
 
     if (iocp == NULL) {
-        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
+        iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0,
+                                      cf->threads);
+    }
+
+    if (iocp == NULL) {
+        ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
                       "CreateIoCompletionPort() failed");
         return NGX_ERROR;
     }
 
-    if (ngx_event_timer_init(log) == NGX_ERROR) {
+    if (ngx_event_timer_init(cycle) == NGX_ERROR) {
         return NGX_ERROR;
     }
 
+    ngx_io = ngx_os_io;
+
     ngx_event_actions = ngx_iocp_module_ctx.actions;
 
     ngx_event_flags = NGX_HAVE_AIO_EVENT|NGX_HAVE_IOCP_EVENT;
@@ -105,14 +111,16 @@ static int ngx_iocp_init(ngx_log_t *log)
 }
 
 
-static void ngx_iocp_done(ngx_log_t *log)
+static void ngx_iocp_done(ngx_cycle_t *cycle)
 {
     if (CloseHandle(iocp) == -1) {
-        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
-        "iocp CloseHandle() failed");
+        ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+                      "iocp CloseHandle() failed");
     }
 
-    ngx_event_timer_done(log);
+    iocp = NULL;
+
+    ngx_event_timer_done(cycle);
 }
 
 
@@ -177,7 +185,16 @@ static int ngx_iocp_process_events(ngx_l
 
     if (rc == 0) {
         err = ngx_errno;
+    } else {
+        err = 0;
+    }
 
+    if (timer != INFINITE) {
+        delta = ngx_msec() - delta;
+        ngx_event_expire_timers(delta);
+    }
+
+    if (err) {
         if (ovlp == NULL) {
             if (err != WAIT_TIMEOUT) {
                 ngx_log_error(NGX_LOG_ALERT, log, err,
@@ -191,11 +208,6 @@ static int ngx_iocp_process_events(ngx_l
         }
     }
 
-    if (timer != INFINITE) {
-        delta = ngx_msec() - delta;
-        ngx_event_expire_timers(delta);
-    }
-
     if (ovlp) {
         ev = ovlp->event;
 
@@ -224,11 +236,11 @@ ngx_log_debug(log, "iocp ev handler: %08
 }
 
 
-static void *ngx_iocp_create_conf(ngx_pool_t *pool)
+static void *ngx_iocp_create_conf(ngx_cycle_t *cycle)
 {
     ngx_iocp_conf_t  *cf;
 
-    ngx_test_null(cf, ngx_palloc(pool, sizeof(ngx_iocp_conf_t)),
+    ngx_test_null(cf, ngx_palloc(cycle->pool, sizeof(ngx_iocp_conf_t)),
                   NGX_CONF_ERROR);
 
     cf->threads = NGX_CONF_UNSET;
@@ -239,7 +251,7 @@ static void *ngx_iocp_create_conf(ngx_po
 }
 
 
-static char *ngx_iocp_init_conf(ngx_pool_t *pool, void *conf)
+static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf)
 {
     ngx_iocp_conf_t *cf = conf;