diff options
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/modules/ngx_rtsig_module.c | 23 | ||||
| -rw-r--r-- | src/event/ngx_event.c | 17 | ||||
| -rw-r--r-- | src/event/ngx_event.h | 2 |
3 files changed, 36 insertions, 6 deletions
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c index 4ab238888..feaf2717c 100644 --- a/src/event/modules/ngx_rtsig_module.c +++ b/src/event/modules/ngx_rtsig_module.c @@ -177,6 +177,10 @@ static ngx_int_t ngx_rtsig_add_connection(ngx_connection_t *c) ngx_rtsig_conf_t *rtscf; if (c->read->accept && c->read->disabled) { + + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, + "rtsig enable connection: fd:%d", c->fd); + if (fcntl(c->fd, F_SETOWN, ngx_pid) == -1) { ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno, "fcntl(F_SETOWN) failed"); @@ -233,14 +237,20 @@ static ngx_int_t ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags) "rtsig del connection: fd:%d", c->fd); if ((flags & NGX_DISABLE_EVENT) && c->read->accept) { + + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, + "rtsig disable connection: fd:%d", c->fd); + c->read->active = 0; - c->read->disabled = 0; + c->read->disabled = 1; return NGX_OK; } if (flags & NGX_CLOSE_EVENT) { c->read->active = 0; c->write->active = 0; + c->read->posted = 0; + c->write->posted = 0; return NGX_OK; } @@ -252,6 +262,8 @@ static ngx_int_t ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags) c->read->active = 0; c->write->active = 0; + c->read->posted = 0; + c->write->posted = 0; return NGX_OK; } @@ -299,6 +311,8 @@ ngx_int_t ngx_rtsig_process_events(ngx_cycle_t *cycle) ngx_accept_disabled--; } else { + ngx_accept_mutex_held = 0; + if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { return NGX_ERROR; } @@ -517,7 +531,8 @@ ngx_int_t ngx_rtsig_process_events(ngx_cycle_t *cycle) static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle) { - int name[2], len, rtsig_max, rtsig_nr, events, ready; + int name[2], rtsig_max, rtsig_nr, events, ready; + size_t len; ngx_int_t tested, n, i; ngx_err_t err; ngx_connection_t *c; @@ -709,8 +724,8 @@ static char *ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf) ngx_conf_init_value(rtscf->signo, SIGRTMIN + 10); ngx_conf_init_value(rtscf->overflow_events, 16); - ngx_conf_init_value(rtscf->overflow_test, 100); - ngx_conf_init_value(rtscf->overflow_threshold, 4); + ngx_conf_init_value(rtscf->overflow_test, 32); + ngx_conf_init_value(rtscf->overflow_threshold, 10); return NGX_CONF_OK; } diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index 208d17117..a1153a6dd 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -628,7 +628,7 @@ static void *ngx_event_create_conf(ngx_cycle_t *cycle) static char *ngx_event_init_conf(ngx_cycle_t *cycle, void *conf) { - ngx_event_conf_t *ecf = conf; + ngx_event_conf_t *ecf = conf; #if (HAVE_KQUEUE) @@ -650,6 +650,8 @@ static char *ngx_event_init_conf(ngx_cycle_t *cycle, void *conf) #elif (HAVE_RTSIG) + ngx_core_conf_t *ccf; + ngx_conf_init_unsigned_value(ecf->connections, DEFAULT_CONNECTIONS); ngx_conf_init_value(ecf->use, ngx_rtsig_module.ctx_index); ngx_conf_init_ptr_value(ecf->name, ngx_rtsig_module_ctx.name->data); @@ -701,5 +703,18 @@ static char *ngx_event_init_conf(ngx_cycle_t *cycle, void *conf) ngx_conf_init_value(ecf->accept_mutex, 1); ngx_conf_init_msec_value(ecf->accept_mutex_delay, 500); +#if (HAVE_RTSIG) + if (ecf->use == ngx_rtsig_module.ctx_index && ecf->accept_mutex == 0) { + ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, + ngx_core_module); + if (ccf->worker_processes) { + ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, + "the \"rtsig\" method requires " + "\"accept_mutex\" to be on"); + return NGX_CONF_ERROR; + } + } +#endif + return NGX_CONF_OK; } diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index 1b9dfb290..986ae0e58 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -277,11 +277,11 @@ extern ngx_event_actions_t ngx_event_actions; */ #define NGX_CLOSE_EVENT 1 +#define NGX_DISABLE_EVENT 2 /* these flags have a meaning only for kqueue */ #define NGX_LOWAT_EVENT 0 -#define NGX_DISABLE_EVENT 0 #define NGX_VNODE_EVENT 0 |
