summaryrefslogtreecommitdiffhomepage
path: root/src/event/modules/ngx_poll_module.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-02-17 21:11:27 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-02-17 21:11:27 +0000
commit22a7c50463654139e14b4645a1ac8e35feec9900 (patch)
treefdb5b6909391cf1c1e59f85d73e1900268c0f7d4 /src/event/modules/ngx_poll_module.c
parent9139cd23517a14e299ec96c675e8c9f96accf6bf (diff)
downloadnginx-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.c25
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;
}