diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-12-04 14:53:00 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-12-04 14:53:00 +0000 |
commit | f5003d8a66790932cae5168a913ae234cd4ce709 (patch) | |
tree | 9f252372fa7b1bb6673394aaecce911e10605593 /src/event/ngx_event_timer.c | |
parent | 7adb8c0e8fa58c51dfaf2a563b2216e7d678435c (diff) | |
download | nginx-f5003d8a66790932cae5168a913ae234cd4ce709.tar.gz nginx-f5003d8a66790932cae5168a913ae234cd4ce709.zip |
nginx-0.0.1-2003-12-04-17:53:00 import
Diffstat (limited to 'src/event/ngx_event_timer.c')
-rw-r--r-- | src/event/ngx_event_timer.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c index 8176ed1c4..296c748ee 100644 --- a/src/event/ngx_event_timer.c +++ b/src/event/ngx_event_timer.c @@ -4,6 +4,81 @@ #include <ngx_event.h> +ngx_rbtree_t *ngx_event_timer_rbtree; + + +int ngx_event_timer_init(ngx_cycle_t *cycle) +{ + ngx_event_timer_rbtree = &sentinel; + sentinel.left = &sentinel; + sentinel.right = &sentinel; + sentinel.parent = &sentinel; + + return NGX_OK; +} + + +void ngx_event_timer_done(ngx_cycle_t *cycle) +{ +} + + +int ngx_event_find_timer(void) +{ + ngx_rbtree_t *node; + + node = ngx_rbtree_min(ngx_event_timer_rbtree); + + if (node == &sentinel) { + return 0; + + } else { + return node->key * NGX_TIMER_RESOLUTION - ngx_elapsed_msec; + } +} + + +void ngx_event_expire_timers(ngx_msec_t timer) +{ + ngx_event_t *ev; + ngx_rbtree_t *node; + + for ( ;; ) { + node = ngx_rbtree_min(ngx_event_timer_rbtree); + + if (node == &sentinel) { + break; + } + + if ((ngx_msec_t) node->key <= + (ngx_elapsed_msec + timer) / NGX_TIMER_RESOLUTION) + { + ev = (ngx_event_t *) + ((char *) node - offsetof(ngx_event_t, rbtree)); + + ngx_del_timer(ev); + + if (ev->delayed) { + ev->delayed = 0; + if (ev->ready == 0) { + continue; + } + + } else { + ev->timedout = 1; + } + + ev->event_handler(ev); + continue; + } + + break; + } +} + + +#if 0 + /* TODO: in multithreaded enviroment all timer operations must be protected by the single mutex */ @@ -275,3 +350,6 @@ void ngx_event_expire_timers(ngx_msec_t timer) } #endif } + + +#endif |