summaryrefslogtreecommitdiffhomepage
path: root/src/event/ngx_event_posted.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-07-07 06:15:04 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-07-07 06:15:04 +0000
commitc78c41cefcf1e1fa8005f81b7c6cc0c857bcf46f (patch)
tree167a534227a7b4203892a0bb1a493a7fd4af6279 /src/event/ngx_event_posted.c
parent81a432a185bc61d46a4d5eb1f96773ee7b3dc6a3 (diff)
downloadnginx-c78c41cefcf1e1fa8005f81b7c6cc0c857bcf46f.tar.gz
nginx-c78c41cefcf1e1fa8005f81b7c6cc0c857bcf46f.tar.bz2
nginx-0.0.7-2004-07-07-10:15:04 import
Diffstat (limited to 'src/event/ngx_event_posted.c')
-rw-r--r--src/event/ngx_event_posted.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/event/ngx_event_posted.c b/src/event/ngx_event_posted.c
index b441b2918..ad3919add 100644
--- 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_posted(ngx_cycle_t *cycle)
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_posted(ngx_cycle_t *cycle)
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,