Mercurial > hg > nginx
comparison src/event/modules/ngx_poll_module.c @ 356:2e3cbc1bbe3c
nginx-0.0.7-2004-06-16-19:32:11 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 16 Jun 2004 15:32:11 +0000 |
parents | e0f3f238db09 |
children | 744ccb59062d |
comparison
equal
deleted
inserted
replaced
355:0fb6c53fb135 | 356:2e3cbc1bbe3c |
---|---|
7 #include <ngx_config.h> | 7 #include <ngx_config.h> |
8 #include <ngx_core.h> | 8 #include <ngx_core.h> |
9 #include <ngx_event.h> | 9 #include <ngx_event.h> |
10 | 10 |
11 | 11 |
12 static int ngx_poll_init(ngx_cycle_t *cycle); | 12 static ngx_int_t ngx_poll_init(ngx_cycle_t *cycle); |
13 static void ngx_poll_done(ngx_cycle_t *cycle); | 13 static void ngx_poll_done(ngx_cycle_t *cycle); |
14 static int ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags); | 14 static ngx_int_t ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags); |
15 static int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags); | 15 static ngx_int_t ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags); |
16 int ngx_poll_process_events(ngx_cycle_t *cycle); | 16 static ngx_int_t ngx_poll_process_events(ngx_cycle_t *cycle); |
17 | 17 |
18 | 18 |
19 static struct pollfd *event_list; | 19 static struct pollfd *event_list; |
20 static int nevents; | 20 static int nevents; |
21 | 21 |
56 NULL /* init process */ | 56 NULL /* init process */ |
57 }; | 57 }; |
58 | 58 |
59 | 59 |
60 | 60 |
61 static int ngx_poll_init(ngx_cycle_t *cycle) | 61 static ngx_int_t ngx_poll_init(ngx_cycle_t *cycle) |
62 { | 62 { |
63 struct pollfd *list; | 63 struct pollfd *list; |
64 | 64 |
65 if (event_list == NULL) { | 65 if (event_list == NULL) { |
66 nevents = 0; | 66 nevents = 0; |
116 ready_index = NULL; | 116 ready_index = NULL; |
117 #endif | 117 #endif |
118 } | 118 } |
119 | 119 |
120 | 120 |
121 static int ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags) | 121 static ngx_int_t ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags) |
122 { | 122 { |
123 ngx_event_t *e; | 123 ngx_event_t *e; |
124 ngx_connection_t *c; | 124 ngx_connection_t *c; |
125 | 125 |
126 c = ev->data; | 126 c = ev->data; |
169 | 169 |
170 return NGX_OK; | 170 return NGX_OK; |
171 } | 171 } |
172 | 172 |
173 | 173 |
174 static int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags) | 174 static ngx_int_t ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags) |
175 { | 175 { |
176 ngx_uint_t i; | 176 ngx_uint_t i; |
177 ngx_cycle_t **cycle; | 177 ngx_cycle_t **cycle; |
178 ngx_event_t *e; | 178 ngx_event_t *e; |
179 ngx_connection_t *c; | 179 ngx_connection_t *c; |
257 | 257 |
258 return NGX_OK; | 258 return NGX_OK; |
259 } | 259 } |
260 | 260 |
261 | 261 |
262 int ngx_poll_process_events(ngx_cycle_t *cycle) | 262 static ngx_int_t ngx_poll_process_events(ngx_cycle_t *cycle) |
263 { | 263 { |
264 int ready; | 264 int ready; |
265 ngx_int_t i, nready; | 265 ngx_int_t i, nready; |
266 ngx_uint_t n, found, lock, expire; | 266 ngx_uint_t n, found, lock, expire; |
267 ngx_msec_t timer; | 267 ngx_msec_t timer; |
270 ngx_event_t *ev; | 270 ngx_event_t *ev; |
271 ngx_epoch_msec_t delta; | 271 ngx_epoch_msec_t delta; |
272 ngx_connection_t *c; | 272 ngx_connection_t *c; |
273 struct timeval tv; | 273 struct timeval tv; |
274 | 274 |
275 if (ngx_event_flags & NGX_OVERFLOW_EVENT) { | 275 for ( ;; ) { |
276 timer = 0; | 276 timer = ngx_event_find_timer(); |
277 | |
278 if (timer != 0) { | |
279 break; | |
280 } | |
281 | |
282 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
283 "poll expired timer"); | |
284 | |
285 ngx_event_expire_timers((ngx_msec_t) | |
286 (ngx_elapsed_msec - ngx_old_elapsed_msec)); | |
287 } | |
288 | |
289 /* NGX_TIMER_INFINITE == INFTIM */ | |
290 | |
291 if (timer == NGX_TIMER_INFINITE) { | |
277 expire = 0; | 292 expire = 0; |
278 | 293 |
279 } else { | 294 } else { |
280 for ( ;; ) { | 295 expire = 1; |
281 timer = ngx_event_find_timer(); | |
282 | |
283 if (timer != 0) { | |
284 break; | |
285 } | |
286 | |
287 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
288 "poll expired timer"); | |
289 | |
290 ngx_event_expire_timers((ngx_msec_t) | |
291 (ngx_elapsed_msec - ngx_old_elapsed_msec)); | |
292 } | |
293 | |
294 /* NGX_TIMER_INFINITE == INFTIM */ | |
295 | |
296 if (timer == NGX_TIMER_INFINITE) { | |
297 expire = 0; | |
298 | |
299 } else { | |
300 expire = 1; | |
301 } | |
302 } | 296 } |
303 | 297 |
304 ngx_old_elapsed_msec = ngx_elapsed_msec; | 298 ngx_old_elapsed_msec = ngx_elapsed_msec; |
305 | 299 |
306 #if (NGX_DEBUG0) | 300 #if (NGX_DEBUG0) |
368 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, | 362 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
369 "poll() returned no events without timeout"); | 363 "poll() returned no events without timeout"); |
370 ngx_accept_mutex_unlock(); | 364 ngx_accept_mutex_unlock(); |
371 return NGX_ERROR; | 365 return NGX_ERROR; |
372 } | 366 } |
373 } | |
374 | |
375 if ((ngx_event_flags & NGX_OVERFLOW_EVENT) && timer == 0 && ready == 0) { | |
376 | |
377 /* the overflowed rt signals queue has been drained */ | |
378 | |
379 ngx_accept_mutex_unlock(); | |
380 return NGX_OK; | |
381 } | 367 } |
382 | 368 |
383 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | 369 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { |
384 ngx_accept_mutex_unlock(); | 370 ngx_accept_mutex_unlock(); |
385 return NGX_ERROR; | 371 return NGX_ERROR; |