diff src/event/ngx_event_posted.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/ngx_event_posted.c
+++ b/src/event/ngx_event_posted.c
@@ -76,6 +76,10 @@ ngx_int_t ngx_event_thread_process_poste
                 return NGX_OK;
             }
 
+            ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                          "posted event lock:%d " PTR_FMT,
+                          *(ev->lock), ev->lock);
+
             if (ngx_trylock(ev->lock) == 0) {
 
                 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
@@ -107,23 +111,31 @@ ngx_int_t ngx_event_thread_process_poste
                 continue;
             }
 
-            ngx_mutex_unlock(ngx_posted_events_mutex);
+            ev->locked = 1;
 
             if (ev->posted) {
+                ev->ready = ev->posted_ready;
+                ev->timedout = ev->posted_timedout;
+                ev->available = ev->posted_available;
+                ev->kq_eof = ev->posted_eof;
+#if (HAVE_KQUEUE)
+                ev->kq_errno = ev->posted_errno;
+#endif
                 ev->posted = 0;
-                if (!ev->timedout) {
-                    ev->ready = 1;
-                }
             }
 
+            ngx_mutex_unlock(ngx_posted_events_mutex);
+
             ev->event_handler(ev);
 
-            ngx_unlock(ev->lock);
-
             if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
                 return NGX_ERROR;
             }
 
+            if (ev->locked) {
+                ngx_unlock(ev->lock);
+            }
+
             break;
         }
     }