Mercurial > hg > nginx
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; }