diff src/event/modules/ngx_kqueue_module.c @ 11:f323b4f74e4a

nginx-0.0.1-2002-09-12-18:42:29 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 12 Sep 2002 14:42:29 +0000
parents 708f8bb772ec
children 055ed05235ae
line wrap: on
line diff
--- 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
 
 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 
                 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 *e
 
     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)