diff src/event/modules/ngx_kqueue_module.c @ 18:72ad26c77d2d

nginx-0.0.1-2002-10-04-21:58:04 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 04 Oct 2002 17:58:04 +0000
parents 8dd06e2844f5
children 53cb81681040
line wrap: on
line diff
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -2,10 +2,6 @@
  * Copyright (C) 2002 Igor Sysoev, http://sysoev.ru
  */
 
-/*
-    NEED ? : unify change_list and event_list:
-       event_list = change_list;
-*/
 
 #include <ngx_config.h>
 #include <ngx_core.h>
@@ -66,6 +62,17 @@ int ngx_kqueue_add_event(ngx_event_t *ev
 
 int ngx_kqueue_del_event(ngx_event_t *ev, int event)
 {
+    ngx_event_t *e;
+
+    if (ev->index <= nchanges && change_list[ev->index].udata == ev) {
+        change_list[ev->index] = change_list[nchanges];
+        e = (ngx_event_t *) change_list[ev->index].udata;
+        e->index = ev->index;
+        nchanges--;
+
+        return NGX_OK;
+    }
+
     return ngx_kqueue_set_event(ev, event, EV_DELETE);
 }
 
@@ -94,6 +101,10 @@ int ngx_kqueue_set_event(ngx_event_t *ev
     change_list[nchanges].fflags = 0;
     change_list[nchanges].data = 0;
     change_list[nchanges].udata = ev;
+
+    if (flags == EV_ADD)
+        ev->index = nchanges;
+
     nchanges++;
 
     return NGX_OK;