diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2004-02-17 21:11:27 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2004-02-17 21:11:27 +0000 |
| commit | 22a7c50463654139e14b4645a1ac8e35feec9900 (patch) | |
| tree | fdb5b6909391cf1c1e59f85d73e1900268c0f7d4 /src/event/modules/ngx_poll_module.c | |
| parent | 9139cd23517a14e299ec96c675e8c9f96accf6bf (diff) | |
| download | nginx-22a7c50463654139e14b4645a1ac8e35feec9900.tar.gz nginx-22a7c50463654139e14b4645a1ac8e35feec9900.tar.bz2 | |
nginx-0.0.2-2004-02-18-00:11:27 import
Diffstat (limited to 'src/event/modules/ngx_poll_module.c')
| -rw-r--r-- | src/event/modules/ngx_poll_module.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c index 9c5f8e12f..c8ea197b6 100644 --- 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 *cycle); 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_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) { int ready; ngx_int_t i, j, nready, found; @@ -257,13 +257,19 @@ static int ngx_poll_process_events(ngx_log_t *log) 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_log_t *log) } } + 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_log_t *log) ngx_event_expire_timers((ngx_msec_t) delta); } - return NGX_OK; + return nready; } |
