aboutsummaryrefslogtreecommitdiff
path: root/src/event
diff options
context:
space:
mode:
Diffstat (limited to 'src/event')
-rw-r--r--src/event/modules/ngx_kqueue_module.c8
-rw-r--r--src/event/ngx_event.c2
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;