comparison src/event/ngx_event_timer.c @ 52:9f2728644651

nginx-0.0.1-2003-01-24-19:09:40 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 24 Jan 2003 16:09:40 +0000
parents a6afbb8a2ada
children d1e42f1b8fd4
comparison
equal deleted inserted replaced
51:a6afbb8a2ada 52:9f2728644651
12 /* STUB */ 12 /* STUB */
13 #define NGX_TIMER_HASH_SIZE 5 13 #define NGX_TIMER_HASH_SIZE 5
14 14
15 ngx_event_t *ngx_timer_queue; 15 ngx_event_t *ngx_timer_queue;
16 int ngx_timer_hash_size; 16 int ngx_timer_hash_size;
17 static int ngx_timer_cur_queue;
17 18
18 19
19 int ngx_event_init_timer(ngx_log_t *log) 20 int ngx_event_init_timer(ngx_log_t *log)
20 { 21 {
21 int i; 22 int i;
22 23
23 ngx_timer_hash_size = NGX_TIMER_HASH_SIZE; 24 ngx_timer_hash_size = NGX_TIMER_HASH_SIZE;
25 ngx_timer_cur_queue = 0;
24 26
25 ngx_test_null(ngx_timer_queue, 27 ngx_test_null(ngx_timer_queue,
26 ngx_alloc(ngx_timer_hash_size * sizeof(ngx_event_t), log), 28 ngx_alloc(ngx_timer_hash_size * sizeof(ngx_event_t), log),
27 NGX_ERROR); 29 NGX_ERROR);
28 30
35 } 37 }
36 38
37 39
38 void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) 40 void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
39 { 41 {
40 int n;
41 ngx_event_t *e; 42 ngx_event_t *e;
42 43
43 #if (NGX_DEBUG_EVENT) 44 #if (NGX_DEBUG_EVENT)
44 ngx_connection_t *c = (ngx_connection_t *) ev->data; 45 ngx_connection_t *c = (ngx_connection_t *) ev->data;
45 ngx_log_debug(ev->log, "set timer: %d:%d" _ c->fd _ timer); 46 ngx_log_debug(ev->log, "set timer: %d:%d" _ c->fd _ timer);
48 if (ev->timer_next || ev->timer_prev) { 49 if (ev->timer_next || ev->timer_prev) {
49 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set"); 50 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set");
50 return; 51 return;
51 } 52 }
52 53
53 n = timer % ngx_timer_hash_size;
54 #if (NGX_DEBUG_EVENT) 54 #if (NGX_DEBUG_EVENT)
55 ngx_log_debug(ev->log, "timer slot: %d" _ n); 55 ngx_log_debug(ev->log, "timer slot: %d" _ ngx_timer_cur_queue);
56 #endif 56 #endif
57 57
58 for (e = ngx_timer_queue[n].timer_next; 58 for (e = ngx_timer_queue[ngx_timer_cur_queue].timer_next;
59 e != &ngx_timer_queue[n] && timer > e->timer_delta; 59 e != &ngx_timer_queue[ngx_timer_cur_queue] && timer > e->timer_delta;
60 e = e->timer_next) 60 e = e->timer_next)
61 { 61 {
62 timer -= e->timer_delta; 62 timer -= e->timer_delta;
63 }
64
65 ngx_timer_cur_queue++;
66 if (ngx_timer_cur_queue >= ngx_timer_hash_size) {
67 ngx_timer_cur_queue = 0;
63 } 68 }
64 69
65 ev->timer_delta = timer; 70 ev->timer_delta = timer;
66 71
67 ev->timer_next = e; 72 ev->timer_next = e;