diff options
Diffstat (limited to 'src/event')
-rw-r--r-- | src/event/modules/ngx_kqueue_module.c | 8 | ||||
-rw-r--r-- | src/event/ngx_event.c | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index efa573ca0..e88b4749d 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -57,6 +57,8 @@ void ngx_kqueue_init(int max_connections, ngx_log_t *log) int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) { + ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0; + return ngx_kqueue_set_event(ev, event, EV_ADD | flags); } @@ -186,6 +188,9 @@ int ngx_kqueue_process_events(ngx_log_t *log) ev->error = event_list[i].fflags; } + if (ev->oneshot) + ngx_del_timer(ev); + if (ev->event_handler(ev) == NGX_ERROR) ev->close_handler(ev); @@ -207,6 +212,9 @@ void ngx_kqueue_add_timer(ngx_event_t *ev, ngx_msec_t timer) ngx_log_debug(ev->log, "set timer: %d" _ timer); + ngx_assert((!ev->timer_next && !ev->timer_prev), return, ev->log, + "timer already set"); + for (e = timer_queue.timer_next; e != &timer_queue && timer > e->timer_delta; e = e->timer_next) diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index 5b4fc0b1f..62d3c1599 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -20,7 +20,7 @@ ngx_event_t *ngx_read_events, *ngx_write_events; #if !(USE_KQUEUE) -#if 1 +#if 0 ngx_event_type_e ngx_event_type = NGX_SELECT_EVENT; #else ngx_event_type_e ngx_event_type = NGX_KQUEUE_EVENT; |