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