diff src/event/modules/ngx_kqueue_module.c @ 374:213f17e9f776

nginx-0.0.7-2004-07-02-09:47:00 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 02 Jul 2004 05:47:00 +0000
parents 018569a8f09c
children 744ccb59062d
line wrap: on
line diff
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -236,7 +236,12 @@ static ngx_int_t ngx_kqueue_del_event(ng
 
     ev->active = 0;
     ev->disabled = 0;
+
+    if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+        return NGX_ERROR;
+    } 
     ev->posted = 0;
+    ngx_mutex_unlock(ngx_posted_events_mutex);
 
     if (ngx_thread_main()
         && nchanges > 0
@@ -519,10 +524,24 @@ static ngx_int_t ngx_kqueue_process_even
                 continue;
             }
 
+            if (ev->log && (ev->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
+                ngx_kqueue_dump_event(ev->log, &event_list[i]);
+            }
+
             ev->returned_instance = instance;
 
-            if (ev->log && (ev->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
-                ngx_kqueue_dump_event(ev->log, &event_list[i]);
+            if (!ev->accept && (ngx_threaded || ngx_accept_mutex_held)) {
+                ev->posted_ready = 1;
+                ev->posted_available += event_list[i].data;
+
+                if (event_list[i].flags & EV_EOF) {
+                    ev->posted_eof = 1;
+                    ev->posted_errno = event_list[i].fflags;
+                }
+
+                ngx_post_event(ev);
+
+                continue;
             }
 
             ev->available = event_list[i].data;
@@ -532,10 +551,6 @@ static ngx_int_t ngx_kqueue_process_even
                 ev->kq_errno = event_list[i].fflags;
             }
 
-            if (ev->oneshot && ev->timer_set) {
-                ngx_del_timer(ev);
-            }
-
             ev->ready = 1;
 
             break;
@@ -563,10 +578,12 @@ static ngx_int_t ngx_kqueue_process_even
             continue;
         }
 
+#if 0
         if (!ev->accept) {
             ngx_post_event(ev);
             continue;
         }
+#endif
 
         if (ngx_accept_disabled > 0) {
             continue;