diff src/event/ngx_event_posted.c @ 380:5ce6561246a5

nginx-0.0.7-2004-07-07-10:15:04 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 07 Jul 2004 06:15:04 +0000
parents 73688d5d7fc3
children 02a511569afb
line wrap: on
line diff
--- a/src/event/ngx_event_posted.c
+++ b/src/event/ngx_event_posted.c
@@ -100,6 +100,18 @@ ngx_int_t ngx_event_thread_process_poste
                 continue;
             }
 
+            if (ev->lock != ev->own_lock) {
+                if (*(ev->own_lock)) {
+                    ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+                                  "the own lock of the posted event "
+                                  PTR_FMT " is busy", ev);
+                    ngx_unlock(ev->lock);
+                    ev = ev->next;
+                    continue;
+                }
+                *(ev->own_lock) = 1;
+            }
+
             ngx_delete_posted_event(ev);
 
             ev->locked = 1;
@@ -134,6 +146,10 @@ ngx_int_t ngx_event_thread_process_poste
 
             if (ev->locked) {
                 ngx_unlock(ev->lock);
+
+                if (ev->lock != ev->own_lock) {
+                    ngx_unlock(ev->own_lock);
+                }
             }
 
             ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,