Mercurial > hg > nginx
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; |