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 }