nginx-0.0.1-2003-12-05-20:07:27 import
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 393c4d1..e438ad3 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -354,6 +354,7 @@
     struct timespec    ts, *tp;
 
     timer = ngx_event_find_timer();
+    ngx_old_elapsed_msec = ngx_elapsed_msec;
 
     if (timer) {
         ts.tv_sec = timer / 1000;
@@ -399,19 +400,6 @@
     if (timer) {
         delta = ngx_elapsed_msec - delta;
 
-#if 0
-        delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
-
-        /*
-         * The expired timers must be handled before a processing of the events
-         * because the new timers can be added during a processing
-         */
-
-        ngx_event_expire_timers((ngx_msec_t) delta);
-
-        ngx_event_set_timer_delta((ngx_msec_t) delta);
-#endif
-
     } else {
         if (events == 0) {
             ngx_log_error(NGX_LOG_ALERT, log, 0,
@@ -519,12 +507,6 @@
         ngx_event_expire_timers((ngx_msec_t) delta);
     }
 
-#if 0
-    if (timer) {
-        ngx_event_expire_timers((ngx_msec_t) delta);
-    }
-#endif
-
     return NGX_OK;
 }
 
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 71b2807..c217025 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -22,7 +22,7 @@
 
 struct ngx_event_s {
     void            *data;
-    /* TODO rename to handler, move flags to struct start */
+    /* TODO rename to handler */
     void           (*event_handler)(ngx_event_t *ev);
 
     u_int            index;
@@ -31,17 +31,14 @@
     ngx_event_t     *prev;
     ngx_event_t     *next;
 
-#if 0
-    ngx_event_t     *timer_prev;
-    ngx_event_t     *timer_next;
-
-    ngx_msec_t       timer_delta;
-#endif
-
     ngx_log_t       *log;
 
     /*
-     * ngx_rbtree_t     rbtree;
+     * The inline of "ngx_rbtree_t  rbtree;".
+     *
+     * It allows to pack rbtree_color and variuos event bit flags into
+     * the single int.  We also use "unsigned char" and then "usigned short"
+     * because otherwise MSVC 6.0 uses an additional int for bit flags.
      */
 
     ngx_int_t        rbtree_key;
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index db97d01..90a4f20 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -5,14 +5,15 @@
 
 
 ngx_rbtree_t  *ngx_event_timer_rbtree;
+ngx_rbtree_t   ngx_event_timer_sentinel;
 
 
 int ngx_event_timer_init(ngx_cycle_t *cycle)
 {
-    ngx_event_timer_rbtree = &sentinel;
-    sentinel.left = &sentinel;
-    sentinel.right = &sentinel;
-    sentinel.parent = &sentinel;
+    ngx_event_timer_rbtree = &ngx_event_timer_sentinel;
+    ngx_event_timer_sentinel.left = &ngx_event_timer_sentinel;
+    ngx_event_timer_sentinel.right = &ngx_event_timer_sentinel;
+    ngx_event_timer_sentinel.parent = &ngx_event_timer_sentinel;
 
     return NGX_OK;
 }
@@ -27,9 +28,9 @@
 {
     ngx_rbtree_t  *node;
 
-    node = ngx_rbtree_min(ngx_event_timer_rbtree);
+    node = ngx_rbtree_min(ngx_event_timer_rbtree, &ngx_event_timer_sentinel);
 
-    if (node == &sentinel) {
+    if (node == &ngx_event_timer_sentinel) {
         return 0;
 
     } else {
@@ -45,14 +46,15 @@
     ngx_rbtree_t  *node;
 
     for ( ;; ) {
-        node = ngx_rbtree_min(ngx_event_timer_rbtree);
+        node = ngx_rbtree_min(ngx_event_timer_rbtree,
+                              &ngx_event_timer_sentinel);
 
-        if (node == &sentinel) {
+        if (node == &ngx_event_timer_sentinel) {
             break;
         }
 
         if ((ngx_msec_t) node->key <= (ngx_msec_t)
-                             (ngx_elapsed_msec + timer) / NGX_TIMER_RESOLUTION)
+                         (ngx_old_elapsed_msec + timer) / NGX_TIMER_RESOLUTION)
         {
             ev = (ngx_event_t *)
                            ((char *) node - offsetof(ngx_event_t, rbtree_key));
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
index 0985cf1..aee0659 100644
--- a/src/event/ngx_event_timer.h
+++ b/src/event/ngx_event_timer.h
@@ -35,11 +35,13 @@
 
 
 extern ngx_rbtree_t  *ngx_event_timer_rbtree;
+extern ngx_rbtree_t   ngx_event_timer_sentinel;
+
 
 
 ngx_inline static void ngx_event_del_timer(ngx_event_t *ev)
 {
-    ngx_rbtree_delete(&ngx_event_timer_rbtree,
+    ngx_rbtree_delete(&ngx_event_timer_rbtree, &ngx_event_timer_sentinel,
                       (ngx_rbtree_t *) &ev->rbtree_key);
 
     ev->timer_set = 0;
@@ -55,7 +57,7 @@
     ev->rbtree_key = (ngx_int_t)
                              (ngx_elapsed_msec + timer) / NGX_TIMER_RESOLUTION;
 
-    ngx_rbtree_insert(&ngx_event_timer_rbtree,
+    ngx_rbtree_insert(&ngx_event_timer_rbtree, &ngx_event_timer_sentinel,
                       (ngx_rbtree_t *) &ev->rbtree_key);
 
     ev->timer_set = 1;