summaryrefslogtreecommitdiffhomepage
path: root/src/event/ngx_event_posted.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/event/ngx_event_posted.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/event/ngx_event_posted.c b/src/event/ngx_event_posted.c
index 0c91f4ea5..975079fc5 100644
--- 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_posted(ngx_cycle_t *cycle)
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_posted(ngx_cycle_t *cycle)
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;
- }
}
- ev->event_handler(ev);
+ ngx_mutex_unlock(ngx_posted_events_mutex);
- ngx_unlock(ev->lock);
+ ev->event_handler(ev);
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
return NGX_ERROR;
}
+ if (ev->locked) {
+ ngx_unlock(ev->lock);
+ }
+
break;
}
}