Mercurial > hg > nginx-quic
comparison src/event/modules/ngx_poll_module.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 | b288069a8696 |
children | e8cdc2989cee |
comparison
equal
deleted
inserted
replaced
52:9f2728644651 | 53:d1e42f1b8fd4 |
---|---|
15 static struct pollfd *event_list; | 15 static struct pollfd *event_list; |
16 static unsigned int nevents; | 16 static unsigned int nevents; |
17 | 17 |
18 static ngx_event_t **event_index; | 18 static ngx_event_t **event_index; |
19 static ngx_event_t **ready_index; | 19 static ngx_event_t **ready_index; |
20 static ngx_event_t timer_queue; | 20 static ngx_event_t *timer_queue; |
21 /* */ | 21 /* */ |
22 | 22 |
23 int ngx_poll_init(int max_connections, ngx_log_t *log) | 23 int ngx_poll_init(int max_connections, ngx_log_t *log) |
24 { | 24 { |
25 ngx_test_null(event_list, | 25 ngx_test_null(event_list, |
34 ngx_alloc(sizeof(ngx_event_t *) * 2 * max_connections, log), | 34 ngx_alloc(sizeof(ngx_event_t *) * 2 * max_connections, log), |
35 NGX_ERROR); | 35 NGX_ERROR); |
36 | 36 |
37 nevents = 0; | 37 nevents = 0; |
38 | 38 |
39 timer_queue.timer_prev = &timer_queue; | 39 timer_queue = ngx_event_init_timer(log); |
40 timer_queue.timer_next = &timer_queue; | 40 if (timer_queue == NULL) { |
41 return NGX_ERROR; | |
42 } | |
41 | 43 |
42 ngx_event_actions.add = ngx_poll_add_event; | 44 ngx_event_actions.add = ngx_poll_add_event; |
43 ngx_event_actions.del = ngx_poll_del_event; | 45 ngx_event_actions.del = ngx_poll_del_event; |
44 ngx_event_actions.timer = ngx_poll_add_timer; | 46 ngx_event_actions.timer = ngx_event_add_timer; |
45 ngx_event_actions.process = ngx_poll_process_events; | 47 ngx_event_actions.process = ngx_poll_process_events; |
46 | 48 |
47 return NGX_OK; | 49 return NGX_OK; |
48 } | 50 } |
49 | 51 |
137 } | 139 } |
138 | 140 |
139 int ngx_poll_process_events(ngx_log_t *log) | 141 int ngx_poll_process_events(ngx_log_t *log) |
140 { | 142 { |
141 int i, ready, nready, found; | 143 int i, ready, nready, found; |
142 u_int timer, delta; | 144 ngx_msec_t timer, delta; |
143 ngx_err_t err; | 145 ngx_err_t err; |
144 ngx_event_t *ev; | 146 ngx_event_t *ev; |
145 ngx_connection_t *c; | 147 ngx_connection_t *c; |
146 | 148 |
147 if (timer_queue.timer_next != &timer_queue) { | 149 timer = ngx_event_find_timer(); |
148 timer = timer_queue.timer_next->timer_delta; | 150 |
151 if (timer) { | |
149 delta = ngx_msec(); | 152 delta = ngx_msec(); |
150 | 153 |
151 } else { | 154 } else { |
152 timer = INFTIM; | 155 timer = INFTIM; |
153 delta = 0; | 156 delta = 0; |
251 | 254 |
252 if (ready != 0) { | 255 if (ready != 0) { |
253 ngx_log_error(NGX_LOG_ALERT, log, 0, "poll ready != events"); | 256 ngx_log_error(NGX_LOG_ALERT, log, 0, "poll ready != events"); |
254 } | 257 } |
255 | 258 |
256 if (timer != INFTIM && timer_queue.timer_next != &timer_queue) { | 259 if (timer != INFTIM) { |
257 if (delta >= timer_queue.timer_next->timer_delta) { | 260 ngx_event_expire_timers(delta); |
258 for ( ;; ) { | 261 } |
259 ev = timer_queue.timer_next; | 262 |
260 | 263 return NGX_OK; |
261 if (ev == &timer_queue || delta < ev->timer_delta) { | 264 } |
262 break; | |
263 } | |
264 | |
265 delta -= ev->timer_delta; | |
266 | |
267 ngx_del_timer(ev); | |
268 ev->timedout = 1; | |
269 if (ev->event_handler(ev) == NGX_ERROR) { | |
270 ev->close_handler(ev); | |
271 } | |
272 } | |
273 | |
274 } else { | |
275 timer_queue.timer_next->timer_delta -= delta; | |
276 } | |
277 } | |
278 | |
279 return NGX_OK; | |
280 } | |
281 | |
282 void ngx_poll_add_timer(ngx_event_t *ev, ngx_msec_t timer) | |
283 { | |
284 ngx_event_t *e; | |
285 | |
286 #if (NGX_DEBUG_EVENT) | |
287 ngx_connection_t *c = (ngx_connection_t *) ev->data; | |
288 ngx_log_debug(ev->log, "set timer: %d:%d" _ c->fd _ timer); | |
289 #endif | |
290 | |
291 if (ev->timer_next || ev->timer_prev) { | |
292 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, "timer already set"); | |
293 return; | |
294 } | |
295 | |
296 for (e = timer_queue.timer_next; | |
297 e != &timer_queue && timer > e->timer_delta; | |
298 e = e->timer_next) | |
299 { | |
300 timer -= e->timer_delta; | |
301 } | |
302 | |
303 ev->timer_delta = timer; | |
304 | |
305 ev->timer_next = e; | |
306 ev->timer_prev = e->timer_prev; | |
307 | |
308 e->timer_prev->timer_next = ev; | |
309 e->timer_prev = ev; | |
310 } |