nginx-0.0.1-2003-03-04-09:33:48 import
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index fc0e34f..41639fb 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002 Igor Sysoev, http://sysoev.ru
+ * Copyright (C) 2002-2003 Igor Sysoev, http://sysoev.ru
  */
 
 
@@ -77,6 +77,9 @@
 #if (HAVE_CLEAR_EVENT)
                      |NGX_HAVE_CLEAR_EVENT
 #endif
+#if (HAVE_LOWAT_EVENT)
+                     |NGX_HAVE_LOWAT_EVENT
+#endif
                      |NGX_HAVE_KQUEUE_EVENT;
 
     ngx_write_chain_proc = ngx_freebsd_write_chain;
@@ -89,6 +92,14 @@
 }
 
 
+void ngx_kqueue_done(ngx_log_t *log)
+{
+    if (close(kq) == -1) {
+        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kqueue close() failed");
+    }
+}
+
+
 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags)
 {
     ev->active = 1;
@@ -173,9 +184,25 @@
     change_list[nchanges].ident = c->fd;
     change_list[nchanges].filter = filter;
     change_list[nchanges].flags = flags;
+    change_list[nchanges].udata = ev;
+
+#if (HAVE_LOWAT_EVENT)
+
+    if ((flags & EV_ADD) && ev->lowat > 0) {
+        change_list[nchanges].fflags = NOTE_LOWAT;
+        change_list[nchanges].data = ev->lowat;
+
+    } else {
+        change_list[nchanges].fflags = 0;
+        change_list[nchanges].data = 0;
+    }
+
+#else
+
     change_list[nchanges].fflags = 0;
     change_list[nchanges].data = 0;
-    change_list[nchanges].udata = ev;
+
+#endif
 
     ev->index = nchanges;
 
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 1310f34..2dabf60 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -153,6 +153,8 @@
         if (ngx_event_flags & NGX_HAVE_IOCP_EVENT) {
             ev->event_handler = &ngx_event_acceptex;
 
+            /* LOOK: we call ngx_iocp_add_event() also
+               in ngx_event_post_acceptex() */
             if (ngx_iocp_add_event(ev) == NGX_ERROR) {
                 return NGX_ERROR;
             }
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 6af76ff..69392ee 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -10,6 +10,8 @@
 #include <ngx_alloc.h>
 #include <ngx_array.h>
 
+/* STUB */
+#define NGX_LOWAT   10000
 
 #define NGX_INVALID_INDEX  0x80000000
 
@@ -81,6 +83,10 @@
     int              error;
 #endif
 
+#if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */
+    int              lowat;
+#endif
+
 
 #if (HAVE_AIO)
 
@@ -151,18 +157,23 @@
 /* Event filter has kqueue features - eof flag, errno, available data, etc */
 #define NGX_HAVE_KQUEUE_EVENT   8
 
-/* Event filter notifies only changes (edgesi) but not initial level - epoll */
-#define NGX_HAVE_EDGE_EVENT     16
+/* Event filter supports low water mark - kqueue's NOTE_LOWAT,
+   early kqueue implementations have no NOTE_LOWAT so we need separate flag */
+#define NGX_HAVE_LOWAT_EVENT    16
+
+/* Event filter notifies only changes (edges) but not initial level - epoll */
+#define NGX_HAVE_EDGE_EVENT     32
 
 /* No need to add or delete event filters - rt signals */
-#define NGX_HAVE_SIGIO_EVENT    32
+#define NGX_HAVE_SIGIO_EVENT    64
 
 /* No need to add or delete event filters - overlapped, aio_read, aioread */
-#define NGX_HAVE_AIO_EVENT      64
+#define NGX_HAVE_AIO_EVENT      128
 
 /* Need to add socket or halde only once - i/o completion port.
    It also requires to set HAVE_AIO_EVENT and NGX_HAVE_AIO_EVENT */
-#define NGX_HAVE_IOCP_EVENT     128
+#define NGX_HAVE_IOCP_EVENT     256
+
 
 /* Event filter is deleted before closing file. Has no meaning
    for select, poll, epoll.
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 65d99da..3bb141e 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -148,6 +148,16 @@
         }
 #endif
 
+#if (HAVE_EDGE_EVENT) /* epoll */
+
+        if (ngx_event_flags & NGX_HAVE_EDGE_EVENT) {
+            if (ngx_edge_add_event(ev) == NGX_ERROR) {
+                return NGX_OK;
+            }
+        }
+
+#endif
+
         ls->handler(c);
 
 #if (USE_KQUEUE)