Mercurial > hg > nginx
comparison src/event/ngx_event_timer.c @ 144:ef8c87afcfc5
nginx-0.0.1-2003-10-12-20:49:16 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 12 Oct 2003 16:49:16 +0000 |
parents | cd54bcbaf3b5 |
children | e92c2c647c57 |
comparison
equal
deleted
inserted
replaced
143:5526213be452 | 144:ef8c87afcfc5 |
---|---|
2 #include <ngx_config.h> | 2 #include <ngx_config.h> |
3 #include <ngx_core.h> | 3 #include <ngx_core.h> |
4 #include <ngx_event.h> | 4 #include <ngx_event.h> |
5 | 5 |
6 | 6 |
7 /* in multithreaded enviroment all timer operations must be | 7 /* TODO: in multithreaded enviroment all timer operations must be |
8 protected by the single mutex */ | 8 protected by the single mutex */ |
9 | 9 |
10 | 10 |
11 static ngx_event_t *ngx_timer_queue, ngx_temp_timer_queue; | 11 static ngx_event_t *ngx_timer_queue, ngx_temp_timer_queue; |
12 static int ngx_timer_cur_queue; | 12 static int ngx_timer_cur_queue; |
68 | 68 |
69 | 69 |
70 void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) | 70 void ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) |
71 { | 71 { |
72 ngx_event_t *e, *queue; | 72 ngx_event_t *e, *queue; |
73 | |
74 #if (NGX_DEBUG_EVENT) | 73 #if (NGX_DEBUG_EVENT) |
75 ngx_connection_t *c = ev->data; | 74 ngx_connection_t *c; |
76 ngx_log_debug(ev->log, "set timer: %d:%d, slot: %d" _ | 75 #endif |
77 c->fd _ timer _ ngx_timer_cur_queue); | 76 |
77 if (ev->timer_set) { | |
78 ngx_del_timer(ev); | |
79 } | |
80 | |
81 #if (NGX_DEBUG_EVENT) | |
82 c = ev->data; | |
83 ngx_log_debug(ev->log, "set timer: %d:%d:%d, slot: %d" _ | |
84 c->fd _ ev->write _ timer _ ngx_timer_cur_queue); | |
78 #endif | 85 #endif |
79 | 86 |
80 if (ev->timer_next || ev->timer_prev) { | 87 if (ev->timer_next || ev->timer_prev) { |
81 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set"); | 88 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set"); |
82 return; | 89 return; |
105 ev->timer_next = e; | 112 ev->timer_next = e; |
106 ev->timer_prev = e->timer_prev; | 113 ev->timer_prev = e->timer_prev; |
107 | 114 |
108 e->timer_prev->timer_next = ev; | 115 e->timer_prev->timer_next = ev; |
109 e->timer_prev = ev; | 116 e->timer_prev = ev; |
117 | |
118 ev->timer_set = 1; | |
119 | |
120 return; | |
110 } | 121 } |
111 | 122 |
112 | 123 |
113 int ngx_event_find_timer(void) | 124 int ngx_event_find_timer(void) |
114 { | 125 { |
127 } | 138 } |
128 } | 139 } |
129 | 140 |
130 if (timer == NGX_MAX_MSEC) { | 141 if (timer == NGX_MAX_MSEC) { |
131 return 0; | 142 return 0; |
132 } else { | 143 } |
133 return timer; | 144 |
134 } | 145 return timer; |
135 } | 146 } |
136 | 147 |
137 | 148 |
138 void ngx_event_expire_timers(ngx_msec_t timer) | 149 void ngx_event_expire_timers(ngx_msec_t timer) |
139 { | 150 { |
188 | 199 |
189 while (ngx_temp_timer_queue.timer_next != &ngx_temp_timer_queue) { | 200 while (ngx_temp_timer_queue.timer_next != &ngx_temp_timer_queue) { |
190 timer += ngx_temp_timer_queue.timer_next->timer_delta; | 201 timer += ngx_temp_timer_queue.timer_next->timer_delta; |
191 ev = ngx_temp_timer_queue.timer_next; | 202 ev = ngx_temp_timer_queue.timer_next; |
192 | 203 |
204 #if (NGX_DEBUG_EVENT) | |
205 ngx_log_debug(ev->log, "process temp timer queue"); | |
206 #endif | |
207 | |
193 ngx_del_timer(ev); | 208 ngx_del_timer(ev); |
194 ngx_add_timer(ev, timer); | 209 ngx_add_timer(ev, timer); |
195 } | 210 } |
196 } | 211 } |