nginx-0.0.7-2004-07-06-20:12:16 import
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 61bf43b..8039c3d 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -369,7 +369,7 @@
for ( ;; ) {
timer = ngx_event_find_timer();
-#if (NGX_THREADS0)
+#if (NGX_THREADS)
if (timer == NGX_TIMER_ERROR) {
return NGX_ERROR;
}
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 7de064f..82d235b 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -212,6 +212,8 @@
#if (NGX_THREADS)
if (*(rev->lock)) {
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+ "spinlock event " PTR_FMT " in accept", rev);
ngx_spinlock(rev->lock, 1000);
ngx_unlock(rev->lock);
}
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 4eecd88..c84dcbc 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -183,6 +183,15 @@
rinstance = rev->returned_instance;
winstance = wev->returned_instance;
+#if (NGX_THREADS)
+ if (*(rev->lock)) {
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pc->log, 0,
+ "spinlock event " PTR_FMT " in connect", rev);
+ ngx_spinlock(rev->lock, 1000);
+ ngx_unlock(rev->lock);
+ }
+#endif
+
ngx_memzero(c, sizeof(ngx_connection_t));
ngx_memzero(rev, sizeof(ngx_event_t));
ngx_memzero(wev, sizeof(ngx_event_t));
diff --git a/src/event/ngx_event_posted.c b/src/event/ngx_event_posted.c
index 41be040..b441b29 100644
--- a/src/event/ngx_event_posted.c
+++ b/src/event/ngx_event_posted.c
@@ -73,8 +73,11 @@
ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle)
{
+ ngx_tls_t *tls;
ngx_event_t *ev;
+ tls = ngx_thread_get_tls();
+
for ( ;; ) {
ev = (ngx_event_t *) ngx_posted_events;
@@ -121,6 +124,8 @@
ngx_mutex_unlock(ngx_posted_events_mutex);
+ tls->event = ev;
+
ev->event_handler(ev);
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
@@ -131,6 +136,9 @@
ngx_unlock(ev->lock);
}
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "posted event " PTR_FMT " is done", ev);
+
break;
}
}
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index 0b38220..c73dfa4 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -68,6 +68,11 @@
ngx_event_t *ev;
ngx_rbtree_t *node;
+ if (timer < 0) {
+ /* avoid the endless loop if the time goes backward for some reason */
+ timer = 0;
+ }
+
for ( ;; ) {
if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
@@ -99,6 +104,9 @@
* been handling has expired timer.
*/
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+ "event " PTR_FMT " is busy in expire timers",
+ ev);
break;
}
#endif