comparison src/event/modules/ngx_epoll_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 71c46860eb55
children cf3d6edb3ad6
comparison
equal deleted inserted replaced
105:531d62c2a28d 106:45f7329b4bd0
385 ngx_epoll_process_events(ngx_cycle_t *cycle) 385 ngx_epoll_process_events(ngx_cycle_t *cycle)
386 { 386 {
387 int events; 387 int events;
388 uint32_t revents; 388 uint32_t revents;
389 ngx_int_t instance, i; 389 ngx_int_t instance, i;
390 ngx_uint_t lock, accept_lock, expire; 390 ngx_uint_t lock, accept_lock;
391 ngx_err_t err; 391 ngx_err_t err;
392 ngx_log_t *log; 392 ngx_log_t *log;
393 ngx_msec_t timer; 393 ngx_msec_t timer, delta;
394 ngx_event_t *rev, *wev; 394 ngx_event_t *rev, *wev;
395 struct timeval tv; 395 struct timeval tv;
396 ngx_connection_t *c; 396 ngx_connection_t *c;
397 ngx_epoch_msec_t delta; 397
398 398 timer = ngx_event_find_timer();
399 for ( ;; ) {
400 timer = ngx_event_find_timer();
401 399
402 #if (NGX_THREADS) 400 #if (NGX_THREADS)
403 401
404 if (timer == NGX_TIMER_ERROR) { 402 if (timer == NGX_TIMER_ERROR) {
405 return NGX_ERROR; 403 return NGX_ERROR;
406 } 404 }
407 405
408 if (timer == NGX_TIMER_INFINITE || timer > 500) { 406 if (timer == NGX_TIMER_INFINITE || timer > 500) {
409 timer = 500; 407 timer = 500;
410 break; 408 break;
411 } 409 }
412 410
413 #endif 411 #endif
414 412
415 if (timer != 0) {
416 break;
417 }
418
419 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
420 "epoll expired timer");
421
422 ngx_event_expire_timers((ngx_msec_t)
423 (ngx_elapsed_msec - ngx_old_elapsed_msec));
424
425 if (ngx_posted_events && ngx_threaded) {
426 ngx_wakeup_worker_thread(cycle);
427 }
428 }
429
430 /* NGX_TIMER_INFINITE == INFTIM */ 413 /* NGX_TIMER_INFINITE == INFTIM */
431 414
432 if (timer == NGX_TIMER_INFINITE) {
433 expire = 0;
434
435 } else {
436 expire = 1;
437 }
438
439 ngx_old_elapsed_msec = ngx_elapsed_msec;
440 accept_lock = 0; 415 accept_lock = 0;
441 416
442 if (ngx_accept_mutex) { 417 if (ngx_accept_mutex) {
443 if (ngx_accept_disabled > 0) { 418 if (ngx_accept_disabled > 0) {
444 ngx_accept_disabled--; 419 ngx_accept_disabled--;
453 428
454 } else if (timer == NGX_TIMER_INFINITE 429 } else if (timer == NGX_TIMER_INFINITE
455 || timer > ngx_accept_mutex_delay) 430 || timer > ngx_accept_mutex_delay)
456 { 431 {
457 timer = ngx_accept_mutex_delay; 432 timer = ngx_accept_mutex_delay;
458 expire = 0;
459 } 433 }
460 } 434 }
461 } 435 }
462 436
463 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 437 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
464 "epoll timer: %d", timer); 438 "epoll timer: %M", timer);
465 439
466 events = epoll_wait(ep, event_list, nevents, timer); 440 events = epoll_wait(ep, event_list, nevents, timer);
467 441
468 if (events == -1) { 442 if (events == -1) {
469 err = ngx_errno; 443 err = ngx_errno;
472 } 446 }
473 447
474 ngx_gettimeofday(&tv); 448 ngx_gettimeofday(&tv);
475 ngx_time_update(tv.tv_sec); 449 ngx_time_update(tv.tv_sec);
476 450
477 delta = ngx_elapsed_msec; 451 delta = ngx_current_time;
478 ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000 452 ngx_current_time = (ngx_msec_t) tv.tv_sec * 1000 + tv.tv_usec / 1000;
479 + tv.tv_usec / 1000 - ngx_start_msec;
480 453
481 if (timer != NGX_TIMER_INFINITE) { 454 if (timer != NGX_TIMER_INFINITE) {
482 delta = ngx_elapsed_msec - delta; 455 delta = ngx_current_time - delta;
483 456
484 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 457 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
485 "epoll timer: %d, delta: %d", timer, (int) delta); 458 "epoll timer: %M, delta: %M", timer, delta);
486 } else { 459 } else {
487 if (events == 0) { 460 if (events == 0) {
488 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, 461 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
489 "epoll_wait() returned no events without timeout"); 462 "epoll_wait() returned no events without timeout");
490 ngx_accept_mutex_unlock(); 463 ngx_accept_mutex_unlock();
643 616
644 if (lock) { 617 if (lock) {
645 ngx_mutex_unlock(ngx_posted_events_mutex); 618 ngx_mutex_unlock(ngx_posted_events_mutex);
646 } 619 }
647 620
648 if (expire && delta) { 621 ngx_event_expire_timers();
649 ngx_event_expire_timers((ngx_msec_t) delta);
650 }
651 622
652 if (ngx_posted_events) { 623 if (ngx_posted_events) {
653 if (ngx_threaded) { 624 if (ngx_threaded) {
654 ngx_wakeup_worker_thread(cycle); 625 ngx_wakeup_worker_thread(cycle);
655 626