Mercurial > hg > nginx
diff src/event/modules/ngx_poll_module.c @ 261:bdd631bf1a1c
nginx-0.0.2-2004-02-18-00:11:27 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 17 Feb 2004 21:11:27 +0000 |
parents | d30f2c39caae |
children | 4b1a3a4acc60 |
line wrap: on
line diff
--- a/src/event/modules/ngx_poll_module.c +++ b/src/event/modules/ngx_poll_module.c @@ -13,7 +13,7 @@ static int ngx_poll_init(ngx_cycle_t *cy static void ngx_poll_done(ngx_cycle_t *cycle); static int ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags); static int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags); -static int ngx_poll_process_events(ngx_log_t *log); +int ngx_poll_process_events(ngx_log_t *log); static struct pollfd *event_list; @@ -245,7 +245,7 @@ static int ngx_poll_del_event(ngx_event_ } -static int ngx_poll_process_events(ngx_log_t *log) +int ngx_poll_process_events(ngx_log_t *log) { int ready; ngx_int_t i, j, nready, found; @@ -257,13 +257,19 @@ static int ngx_poll_process_events(ngx_l ngx_connection_t *c; struct timeval tv; - timer = ngx_event_find_timer(); - ngx_old_elapsed_msec = ngx_elapsed_msec; + if (ngx_event_flags & NGX_OVERFLOW_EVENT) { + timer = 0; + + } else { + timer = ngx_event_find_timer(); - if (timer == 0) { - timer = (ngx_msec_t) INFTIM; + if (timer == 0) { + timer = (ngx_msec_t) INFTIM; + } } + ngx_old_elapsed_msec = ngx_elapsed_msec; + #if (NGX_DEBUG0) for (i = 0; i < nevents; i++) { ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, "poll: %d: fd:%d ev:%04X", @@ -309,6 +315,11 @@ static int ngx_poll_process_events(ngx_l } } + if (timer == 0 && ready == 0) { + /* the overflowed rt signals queue has been drained */ + return NGX_OK; + } + nready = 0; for (i = 0; i < nevents && ready; i++) { @@ -431,5 +442,5 @@ static int ngx_poll_process_events(ngx_l ngx_event_expire_timers((ngx_msec_t) delta); } - return NGX_OK; + return nready; }