aboutsummaryrefslogtreecommitdiff
path: root/src/event/modules/ngx_poll_module.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/event/modules/ngx_poll_module.c')
-rw-r--r--src/event/modules/ngx_poll_module.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index dd98eca25..ffe59d49f 100644
--- 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_t *ev, int event, u_int flags)
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_t *ev, int event, u_int flags)
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 *cycle)
} 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 *cycle)
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 *cycle)
}
}
- 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;
}