comparison src/event/modules/ngx_epoll_module.c @ 323:ba876b26b76d

nginx-0.0.3-2004-04-21-22:54:33 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 21 Apr 2004 18:54:33 +0000
parents 56496082668b
children fb4dfb2ac0fc
comparison
equal deleted inserted replaced
322:ab2f8c9a2a45 323:ba876b26b76d
343 int ngx_epoll_process_events(ngx_cycle_t *cycle) 343 int ngx_epoll_process_events(ngx_cycle_t *cycle)
344 { 344 {
345 int events; 345 int events;
346 size_t n; 346 size_t n;
347 ngx_int_t instance, i; 347 ngx_int_t instance, i;
348 ngx_uint_t lock, expire; 348 ngx_uint_t lock, accept_lock, expire;
349 ngx_err_t err; 349 ngx_err_t err;
350 ngx_log_t *log; 350 ngx_log_t *log;
351 ngx_msec_t timer; 351 ngx_msec_t timer;
352 struct timeval tv; 352 struct timeval tv;
353 ngx_connection_t *c; 353 ngx_connection_t *c;
375 } else { 375 } else {
376 expire = 1; 376 expire = 1;
377 } 377 }
378 378
379 ngx_old_elapsed_msec = ngx_elapsed_msec; 379 ngx_old_elapsed_msec = ngx_elapsed_msec;
380 accept_lock = 0;
380 381
381 if (ngx_accept_mutex) { 382 if (ngx_accept_mutex) {
382 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { 383 if (ngx_accept_disabled > 0) {
383 return NGX_ERROR; 384 ngx_accept_disabled--;
384 } 385
385 386 } else {
386 if (ngx_accept_mutex_held == 0 387 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
387 && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay)) 388 return NGX_ERROR;
388 { 389 }
389 timer = ngx_accept_mutex_delay; 390
390 expire = 0; 391 if (ngx_accept_mutex_held) {
392 accept_lock = 1;
393
394 } else if (timer == NGX_TIMER_INFINITE
395 || timer > ngx_accept_mutex_delay)
396 {
397 timer = ngx_accept_mutex_delay;
398 expire = 0;
399 }
391 } 400 }
392 } 401 }
393 402
394 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 403 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
395 "epoll timer: %d", timer); 404 "epoll timer: %d", timer);
511 c->read->event_handler(c->read); 520 c->read->event_handler(c->read);
512 521
513 } else if (!c->read->accept) { 522 } else if (!c->read->accept) {
514 ngx_post_event(c->read); 523 ngx_post_event(c->read);
515 524
516 } else { 525 } else if (ngx_accept_disabled <= 0) {
526
517 ngx_mutex_unlock(ngx_posted_events_mutex); 527 ngx_mutex_unlock(ngx_posted_events_mutex);
518 528
519 c->read->event_handler(c->read); 529 c->read->event_handler(c->read);
530
531 if (ngx_accept_disabled > 0) {
532 ngx_accept_mutex_unlock();
533 accept_lock = 0;
534 }
520 535
521 if (i + 1 == events) { 536 if (i + 1 == events) {
522 lock = 0; 537 lock = 0;
523 break; 538 break;
524 } 539 }
525 540
526 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { 541 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
527 ngx_accept_mutex_unlock(); 542 if (accept_lock) {
543 ngx_accept_mutex_unlock();
544 }
528 return NGX_ERROR; 545 return NGX_ERROR;
529 } 546 }
530 } 547 }
531 } 548 }
532 } 549 }
533 550
551 if (accept_lock) {
552 ngx_accept_mutex_unlock();
553 }
554
534 if (lock) { 555 if (lock) {
535 ngx_mutex_unlock(ngx_posted_events_mutex); 556 ngx_mutex_unlock(ngx_posted_events_mutex);
536 } 557 }
537 558
538 ngx_accept_mutex_unlock();
539
540 if (expire && delta) { 559 if (expire && delta) {
541 ngx_event_expire_timers((ngx_msec_t) delta); 560 ngx_event_expire_timers((ngx_msec_t) delta);
542 } 561 }
543 562
544 if (!ngx_threaded) { 563 if (!ngx_threaded) {