Mercurial > hg > nginx
diff src/event/ngx_event_timer.c @ 195:8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 25 Nov 2003 20:44:56 +0000 |
parents | e92c2c647c57 |
children | 4a9a2b1dd6fa |
line wrap: on
line diff
--- a/src/event/ngx_event_timer.c Fri Nov 21 06:30:49 2003 +0000 +++ b/src/event/ngx_event_timer.c Tue Nov 25 20:44:56 2003 +0000 @@ -8,15 +8,21 @@ protected by the single mutex */ +#if 0 static ngx_event_t *ngx_timer_queue, ngx_temp_timer_queue; +static int ngx_expire_timers; +#endif + +static ngx_event_t *ngx_timer_queue; +static ngx_msec_t *ngx_timer_delta; static int ngx_timer_cur_queue; static int ngx_timer_queue_num; -static int ngx_expire_timers; int ngx_event_timer_init(ngx_cycle_t *cycle) { - int i; + ngx_int_t i; + ngx_msec_t *new_delta; ngx_event_t *new_queue; ngx_event_conf_t *ecf; @@ -38,6 +44,21 @@ ngx_timer_queue = new_queue; + ngx_test_null(new_delta, + ngx_calloc(ecf->timer_queues * sizeof(ngx_msec_t), + cycle->log), + NGX_ERROR); + + for (i = 0; i < ngx_timer_queue_num; i++) { + new_delta[i] = ngx_timer_delta[i]; + } + + if (ngx_timer_delta) { + ngx_free(ngx_timer_delta); + } + + ngx_timer_delta = new_delta; + ngx_timer_queue_num = ecf->timer_queues; ngx_timer_cur_queue = 0; @@ -52,8 +73,10 @@ exit(1); } +#if 0 ngx_temp_timer_queue.timer_prev = &ngx_temp_timer_queue; ngx_temp_timer_queue.timer_next = &ngx_temp_timer_queue; +#endif return NGX_OK;; } @@ -63,6 +86,10 @@ { ngx_free(ngx_timer_queue); ngx_timer_queue = NULL; + + ngx_free(ngx_timer_delta); + ngx_timer_delta = NULL; + ngx_timer_queue_num = 0; } @@ -89,6 +116,15 @@ return; } + queue = &ngx_timer_queue[ngx_timer_cur_queue]; + timer += ngx_timer_delta[ngx_timer_cur_queue++]; + + if (ngx_timer_cur_queue >= ngx_timer_queue_num) { + ngx_timer_cur_queue = 0; + } + + +#if 0 if (ngx_expire_timers) { queue = &ngx_temp_timer_queue; @@ -99,6 +135,7 @@ ngx_timer_cur_queue = 0; } } +#endif for (e = queue->timer_next; e != queue && timer > e->timer_delta; @@ -123,7 +160,7 @@ int ngx_event_find_timer(void) { - int i; + ngx_int_t i; ngx_msec_t timer; timer = NGX_MAX_MSEC; @@ -146,17 +183,34 @@ } +void ngx_event_set_timer_delta(ngx_msec_t timer) +{ + ngx_int_t i; + + for (i = 0; i < ngx_timer_queue_num; i++) { + ngx_timer_delta[i] = timer; + } +} + + +/* void ngx_event_expire_timers() */ void ngx_event_expire_timers(ngx_msec_t timer) { - int i; + ngx_int_t i; +#if 0 ngx_msec_t delta; +#endif ngx_event_t *ev; +#if 0 ngx_expire_timers = 1; +#endif for (i = 0; i < ngx_timer_queue_num; i++) { +#if 0 delta = timer; +#endif for ( ;; ) { ev = ngx_timer_queue[i].timer_next; @@ -165,12 +219,21 @@ break; } + if (ev->timer_delta > ngx_timer_delta[i]) { + ev->timer_delta -= ngx_timer_delta[i]; + break; + } + + ngx_timer_delta[i] -= ev->timer_delta; + +#if 0 if (ev->timer_delta > delta) { ev->timer_delta -= delta; break; } delta -= ev->timer_delta; +#endif ngx_del_timer(ev); @@ -186,8 +249,11 @@ ev->event_handler(ev); } + + ngx_timer_delta[i] = 0; } +#if 0 ngx_expire_timers = 0; if (ngx_temp_timer_queue.timer_next == &ngx_temp_timer_queue) { @@ -207,4 +273,5 @@ ngx_del_timer(ev); ngx_add_timer(ev, timer); } +#endif }