Mercurial > hg > nginx
comparison src/event/ngx_event_timer.c @ 53:d1e42f1b8fd4
nginx-0.0.1-2003-01-27-00:08:14 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 26 Jan 2003 21:08:14 +0000 |
parents | 9f2728644651 |
children | 57c2e18d3572 |
comparison
equal
deleted
inserted
replaced
52:9f2728644651 | 53:d1e42f1b8fd4 |
---|---|
8 #include <ngx_event.h> | 8 #include <ngx_event.h> |
9 | 9 |
10 #include <ngx_event_timer.h> | 10 #include <ngx_event_timer.h> |
11 | 11 |
12 /* STUB */ | 12 /* STUB */ |
13 #define NGX_TIMER_HASH_SIZE 5 | 13 #define NGX_TIMER_QUEUE_NUM 5 |
14 | 14 |
15 ngx_event_t *ngx_timer_queue; | 15 /* should be per-thread */ |
16 int ngx_timer_hash_size; | 16 static ngx_event_t *ngx_timer_queue; |
17 static int ngx_timer_cur_queue; | 17 static int ngx_timer_cur_queue; |
18 /* */ | |
19 static int ngx_timer_queue_num; | |
18 | 20 |
19 | 21 |
20 int ngx_event_init_timer(ngx_log_t *log) | 22 ngx_event_t *ngx_event_init_timer(ngx_log_t *log) |
21 { | 23 { |
22 int i; | 24 int i; |
23 | 25 |
24 ngx_timer_hash_size = NGX_TIMER_HASH_SIZE; | 26 ngx_timer_queue_num = NGX_TIMER_QUEUE_NUM; |
25 ngx_timer_cur_queue = 0; | 27 ngx_timer_cur_queue = 0; |
26 | 28 |
27 ngx_test_null(ngx_timer_queue, | 29 ngx_test_null(ngx_timer_queue, |
28 ngx_alloc(ngx_timer_hash_size * sizeof(ngx_event_t), log), | 30 ngx_alloc(ngx_timer_queue_num * sizeof(ngx_event_t), log), |
29 NGX_ERROR); | 31 NULL); |
30 | 32 |
31 for (i = 0; i < ngx_timer_hash_size; i++) { | 33 for (i = 0; i < ngx_timer_queue_num; i++) { |
32 ngx_timer_queue[i].timer_prev = &ngx_timer_queue[i]; | 34 ngx_timer_queue[i].timer_prev = &ngx_timer_queue[i]; |
33 ngx_timer_queue[i].timer_next = &ngx_timer_queue[i]; | 35 ngx_timer_queue[i].timer_next = &ngx_timer_queue[i]; |
34 } | 36 } |
35 | 37 |
36 return NGX_OK; | 38 return ngx_timer_queue; |
37 } | 39 } |
38 | 40 |
39 | 41 |
40 void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) | 42 void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) |
41 { | 43 { |
61 { | 63 { |
62 timer -= e->timer_delta; | 64 timer -= e->timer_delta; |
63 } | 65 } |
64 | 66 |
65 ngx_timer_cur_queue++; | 67 ngx_timer_cur_queue++; |
66 if (ngx_timer_cur_queue >= ngx_timer_hash_size) { | 68 if (ngx_timer_cur_queue >= ngx_timer_queue_num) { |
67 ngx_timer_cur_queue = 0; | 69 ngx_timer_cur_queue = 0; |
68 } | 70 } |
69 | 71 |
70 ev->timer_delta = timer; | 72 ev->timer_delta = timer; |
71 | 73 |
75 e->timer_prev->timer_next = ev; | 77 e->timer_prev->timer_next = ev; |
76 e->timer_prev = ev; | 78 e->timer_prev = ev; |
77 } | 79 } |
78 | 80 |
79 | 81 |
82 int ngx_event_find_timer(void) | |
83 { | |
84 int i; | |
85 ngx_msec_t timer; | |
86 | |
87 timer = NGX_MAX_MSEC; | |
88 | |
89 for (i = 0; i < ngx_timer_queue_num; i++) { | |
90 if (ngx_timer_queue[i].timer_next == &ngx_timer_queue[i]) { | |
91 continue; | |
92 } | |
93 | |
94 if (timer > ngx_timer_queue[i].timer_next->timer_delta) { | |
95 timer = ngx_timer_queue[i].timer_next->timer_delta; | |
96 } | |
97 } | |
98 | |
99 if (timer == NGX_MAX_MSEC) { | |
100 return 0; | |
101 } else { | |
102 return timer; | |
103 } | |
104 } | |
105 | |
106 | |
80 void ngx_event_expire_timers(ngx_msec_t timer) | 107 void ngx_event_expire_timers(ngx_msec_t timer) |
81 { | 108 { |
82 int i; | 109 int i; |
83 ngx_msec_t delta; | 110 ngx_msec_t delta; |
84 ngx_event_t *ev; | 111 ngx_event_t *ev; |
85 | 112 |
86 for (i = 0; i < ngx_timer_hash_size; i++) { | 113 for (i = 0; i < ngx_timer_queue_num; i++) { |
87 | 114 |
88 delta = timer; | 115 delta = timer; |
89 | 116 |
90 for ( ;; ) { | 117 for ( ;; ) { |
91 ev = ngx_timer_queue[i].timer_next; | 118 ev = ngx_timer_queue[i].timer_next; |