Mercurial > hg > nginx
comparison src/event/modules/ngx_poll_module.c @ 261:bdd631bf1a1c
nginx-0.0.2-2004-02-18-00:11:27 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 17 Feb 2004 21:11:27 +0000 |
parents | d30f2c39caae |
children | 4b1a3a4acc60 |
comparison
equal
deleted
inserted
replaced
260:5dacbb4daaf6 | 261:bdd631bf1a1c |
---|---|
11 | 11 |
12 static int ngx_poll_init(ngx_cycle_t *cycle); | 12 static int 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 int 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 int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags); |
16 static int ngx_poll_process_events(ngx_log_t *log); | 16 int ngx_poll_process_events(ngx_log_t *log); |
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 |
243 | 243 |
244 return NGX_OK; | 244 return NGX_OK; |
245 } | 245 } |
246 | 246 |
247 | 247 |
248 static int ngx_poll_process_events(ngx_log_t *log) | 248 int ngx_poll_process_events(ngx_log_t *log) |
249 { | 249 { |
250 int ready; | 250 int ready; |
251 ngx_int_t i, j, nready, found; | 251 ngx_int_t i, j, nready, found; |
252 ngx_msec_t timer; | 252 ngx_msec_t timer; |
253 ngx_err_t err; | 253 ngx_err_t err; |
255 ngx_event_t *ev; | 255 ngx_event_t *ev; |
256 ngx_epoch_msec_t delta; | 256 ngx_epoch_msec_t delta; |
257 ngx_connection_t *c; | 257 ngx_connection_t *c; |
258 struct timeval tv; | 258 struct timeval tv; |
259 | 259 |
260 timer = ngx_event_find_timer(); | 260 if (ngx_event_flags & NGX_OVERFLOW_EVENT) { |
261 timer = 0; | |
262 | |
263 } else { | |
264 timer = ngx_event_find_timer(); | |
265 | |
266 if (timer == 0) { | |
267 timer = (ngx_msec_t) INFTIM; | |
268 } | |
269 } | |
270 | |
261 ngx_old_elapsed_msec = ngx_elapsed_msec; | 271 ngx_old_elapsed_msec = ngx_elapsed_msec; |
262 | |
263 if (timer == 0) { | |
264 timer = (ngx_msec_t) INFTIM; | |
265 } | |
266 | 272 |
267 #if (NGX_DEBUG0) | 273 #if (NGX_DEBUG0) |
268 for (i = 0; i < nevents; i++) { | 274 for (i = 0; i < nevents; i++) { |
269 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, "poll: %d: fd:%d ev:%04X", | 275 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, "poll: %d: fd:%d ev:%04X", |
270 i, event_list[i].fd, event_list[i].events); | 276 i, event_list[i].fd, event_list[i].events); |
305 if (ready == 0) { | 311 if (ready == 0) { |
306 ngx_log_error(NGX_LOG_ALERT, log, 0, | 312 ngx_log_error(NGX_LOG_ALERT, log, 0, |
307 "poll() returned no events without timeout"); | 313 "poll() returned no events without timeout"); |
308 return NGX_ERROR; | 314 return NGX_ERROR; |
309 } | 315 } |
316 } | |
317 | |
318 if (timer == 0 && ready == 0) { | |
319 /* the overflowed rt signals queue has been drained */ | |
320 return NGX_OK; | |
310 } | 321 } |
311 | 322 |
312 nready = 0; | 323 nready = 0; |
313 | 324 |
314 for (i = 0; i < nevents && ready; i++) { | 325 for (i = 0; i < nevents && ready; i++) { |
429 | 440 |
430 if (timer != (ngx_msec_t) INFTIM && delta) { | 441 if (timer != (ngx_msec_t) INFTIM && delta) { |
431 ngx_event_expire_timers((ngx_msec_t) delta); | 442 ngx_event_expire_timers((ngx_msec_t) delta); |
432 } | 443 } |
433 | 444 |
434 return NGX_OK; | 445 return nready; |
435 } | 446 } |