Mercurial > hg > nginx
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) { |