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;
 }