comparison src/event/modules/ngx_poll_module.c @ 106:45f7329b4bd0 NGINX_0_3_0

nginx 0.3.0 *) Change: the 10-days live time limit of worker process was eliminated. The limit was introduced because of millisecond timers overflow.
author Igor Sysoev <http://sysoev.ru>
date Fri, 07 Oct 2005 00:00:00 +0400
parents 45945fa8b8ba
children 408f195b3482
comparison
equal deleted inserted replaced
105:531d62c2a28d 106:45f7329b4bd0
276 276
277 static ngx_int_t 277 static ngx_int_t
278 ngx_poll_process_events(ngx_cycle_t *cycle) 278 ngx_poll_process_events(ngx_cycle_t *cycle)
279 { 279 {
280 int ready, revents; 280 int ready, revents;
281 ngx_err_t err;
281 ngx_int_t i, nready; 282 ngx_int_t i, nready;
282 ngx_uint_t n, found, lock, expire; 283 ngx_uint_t n, found, lock;
283 ngx_msec_t timer; 284 ngx_msec_t timer, delta;
284 ngx_err_t err;
285 ngx_cycle_t **old_cycle; 285 ngx_cycle_t **old_cycle;
286 ngx_event_t *ev; 286 ngx_event_t *ev;
287 ngx_epoch_msec_t delta;
288 ngx_connection_t *c; 287 ngx_connection_t *c;
289 struct timeval tv; 288 struct timeval tv;
290 289
291 for ( ;; ) { 290 timer = ngx_event_find_timer();
292 timer = ngx_event_find_timer();
293
294 if (timer != 0) {
295 break;
296 }
297
298 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
299 "poll expired timer");
300
301 ngx_event_expire_timers((ngx_msec_t)
302 (ngx_elapsed_msec - ngx_old_elapsed_msec));
303 }
304 291
305 /* NGX_TIMER_INFINITE == INFTIM */ 292 /* NGX_TIMER_INFINITE == INFTIM */
306
307 if (timer == NGX_TIMER_INFINITE) {
308 expire = 0;
309
310 } else {
311 expire = 1;
312 }
313
314 ngx_old_elapsed_msec = ngx_elapsed_msec;
315 293
316 #if (NGX_DEBUG0) 294 #if (NGX_DEBUG0)
317 if (cycle->log->log_level & NGX_LOG_DEBUG_ALL) { 295 if (cycle->log->log_level & NGX_LOG_DEBUG_ALL) {
318 for (i = 0; i < nevents; i++) { 296 for (i = 0; i < nevents; i++) {
319 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 297 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
335 if (ngx_accept_mutex_held == 0 313 if (ngx_accept_mutex_held == 0
336 && (timer == NGX_TIMER_INFINITE 314 && (timer == NGX_TIMER_INFINITE
337 || timer > ngx_accept_mutex_delay)) 315 || timer > ngx_accept_mutex_delay))
338 { 316 {
339 timer = ngx_accept_mutex_delay; 317 timer = ngx_accept_mutex_delay;
340 expire = 0;
341 } 318 }
342 } 319 }
343 } 320 }
344 321
345 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "poll timer: %d", timer); 322 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "poll timer: %M", timer);
346 323
347 ready = poll(event_list, (u_int) nevents, (int) timer); 324 ready = poll(event_list, (u_int) nevents, (int) timer);
348 325
349 if (ready == -1) { 326 if (ready == -1) {
350 err = ngx_errno; 327 err = ngx_errno;
353 } 330 }
354 331
355 ngx_gettimeofday(&tv); 332 ngx_gettimeofday(&tv);
356 ngx_time_update(tv.tv_sec); 333 ngx_time_update(tv.tv_sec);
357 334
358 delta = ngx_elapsed_msec; 335 delta = ngx_current_time;
359 ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000 336 ngx_current_time = (ngx_msec_t) tv.tv_sec * 1000 + tv.tv_usec / 1000;
360 + tv.tv_usec / 1000 - ngx_start_msec;
361 337
362 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 338 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
363 "poll ready %d of %d", ready, nevents); 339 "poll ready %d of %d", ready, nevents);
364 340
365 if (err) { 341 if (err) {
368 ngx_accept_mutex_unlock(); 344 ngx_accept_mutex_unlock();
369 return NGX_ERROR; 345 return NGX_ERROR;
370 } 346 }
371 347
372 if (timer != NGX_TIMER_INFINITE) { 348 if (timer != NGX_TIMER_INFINITE) {
373 delta = ngx_elapsed_msec - delta; 349 delta = ngx_current_time - delta;
374 350
375 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 351 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
376 "poll timer: %d, delta: %d", timer, (int) delta); 352 "poll timer: %M, delta: %M", timer, delta);
377 } else { 353 } else {
378 if (ready == 0) { 354 if (ready == 0) {
379 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, 355 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
380 "poll() returned no events without timeout"); 356 "poll() returned no events without timeout");
381 ngx_accept_mutex_unlock(); 357 ngx_accept_mutex_unlock();
591 567
592 if (ready != 0) { 568 if (ready != 0) {
593 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "poll ready != events"); 569 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "poll ready != events");
594 } 570 }
595 571
596 if (expire && delta) { 572 ngx_event_expire_timers();
597 ngx_event_expire_timers((ngx_msec_t) delta);
598 }
599 573
600 if (!ngx_threaded) { 574 if (!ngx_threaded) {
601 ngx_event_process_posted(cycle); 575 ngx_event_process_posted(cycle);
602 } 576 }
603 577