diff src/event/modules/ngx_poll_module.c @ 315:39b6f2df45c0

nginx-0.0.3-2004-04-14-21:44:28 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 14 Apr 2004 17:44:28 +0000
parents d71c87d11b16
children a0beefedaf94
line wrap: on
line diff
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -125,6 +125,8 @@ static int ngx_poll_add_event(ngx_event_
 
     c = ev->data;
 
+    ev->active = 1;
+
     if (ev->index != NGX_INVALID_INDEX) {
         ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
                       "poll event fd:%d ev:%d is already set", c->fd, event);
@@ -163,7 +165,6 @@ static int ngx_poll_add_event(ngx_event_
         ev->index = e->index;
     }
 
-    ev->active = 1;
     ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0;
 
     return NGX_OK;
@@ -278,7 +279,11 @@ int ngx_poll_process_events(ngx_cycle_t 
     } else {
         timer = ngx_event_find_timer();
 
-        if (timer == 0) {
+        if (timer == -1) {
+            timer = 0;
+            expire = 1;
+
+        } else if (timer == 0) {
             timer = (ngx_msec_t) INFTIM;
             expire = 0;
 
@@ -302,7 +307,9 @@ int ngx_poll_process_events(ngx_cycle_t 
             return NGX_ERROR;
         }
 
-        if (ngx_accept_mutex_held == 0 && timer > ngx_accept_mutex_delay) {
+        if (ngx_accept_mutex_held == 0 
+            && (timer == (ngx_msec_t) INFTIM || timer > ngx_accept_mutex_delay))
+        {
             timer = ngx_accept_mutex_delay;
             expire = 0;
         }
@@ -348,8 +355,11 @@ int ngx_poll_process_events(ngx_cycle_t 
         }
     }
 
-    if (timer == 0 && ready == 0) {
+    if ((ngx_event_flags & NGX_OVERFLOW_EVENT) && timer == 0 && ready == 0) {
+
         /* the overflowed rt signals queue has been drained */
+
+        ngx_accept_mutex_unlock();
         return NGX_OK;
     }