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;