diff src/event/ngx_event_timer.c @ 51:a6afbb8a2ada

nginx-0.0.1-2003-01-24-09:20:47 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 24 Jan 2003 06:20:47 +0000
parents b288069a8696
children 9f2728644651
line wrap: on
line diff
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -51,6 +51,9 @@ void ngx_event_add_timer(ngx_event_t *ev
     }
 
     n = timer % ngx_timer_hash_size;
+#if (NGX_DEBUG_EVENT)
+    ngx_log_debug(ev->log, "timer slot: %d" _ n);
+#endif
 
     for (e = ngx_timer_queue[n].timer_next;
          e != &ngx_timer_queue[n] && timer > e->timer_delta;
@@ -67,3 +70,38 @@ void ngx_event_add_timer(ngx_event_t *ev
     e->timer_prev->timer_next = ev;
     e->timer_prev = ev;
 }
+
+
+void ngx_event_expire_timers(ngx_msec_t timer)
+{
+    int           i;
+    ngx_msec_t    delta;
+    ngx_event_t  *ev;
+
+    for (i = 0; i < ngx_timer_hash_size; i++) {
+
+        delta = timer;
+
+        for ( ;; ) {
+            ev = ngx_timer_queue[i].timer_next;
+
+            if (ev == &ngx_timer_queue[i]) {
+                break;
+            }
+
+            if (ev->timer_delta > delta) {
+                ev->timer_delta -= delta;
+                break;
+            }
+
+            delta -= ev->timer_delta;
+
+            ngx_del_timer(ev);
+            ev->timedout = 1;
+
+            if (ev->event_handler(ev) == NGX_ERROR) {
+                ev->close_handler(ev);
+            }
+        }
+    }
+}