Mercurial > hg > nginx
comparison src/event/modules/ngx_devpoll_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 | 7c54d93f5965 |
comparison
equal
deleted
inserted
replaced
322:ab2f8c9a2a45 | 323:ba876b26b76d |
---|---|
311 | 311 |
312 int ngx_devpoll_process_events(ngx_cycle_t *cycle) | 312 int ngx_devpoll_process_events(ngx_cycle_t *cycle) |
313 { | 313 { |
314 int events; | 314 int events; |
315 ngx_int_t i; | 315 ngx_int_t i; |
316 ngx_uint_t j, lock, expire; | 316 ngx_uint_t j, lock, accept_lock, expire; |
317 size_t n; | 317 size_t n; |
318 ngx_msec_t timer; | 318 ngx_msec_t timer; |
319 ngx_err_t err; | 319 ngx_err_t err; |
320 ngx_cycle_t **old_cycle; | 320 ngx_cycle_t **old_cycle; |
321 ngx_connection_t *c; | 321 ngx_connection_t *c; |
344 | 344 |
345 } else { | 345 } else { |
346 expire = 1; | 346 expire = 1; |
347 } | 347 } |
348 | 348 |
349 ngx_old_elapsed_msec = ngx_elapsed_msec; | |
350 accept_lock = 0; | |
351 | |
349 if (ngx_accept_mutex) { | 352 if (ngx_accept_mutex) { |
350 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { | 353 if (ngx_accept_disabled > 0) { |
351 return NGX_ERROR; | 354 ngx_accept_disabled--; |
352 } | 355 |
353 | 356 } else { |
354 if (ngx_accept_mutex_held == 0 | 357 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { |
355 && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay)) | 358 return NGX_ERROR; |
356 { | 359 } |
357 timer = ngx_accept_mutex_delay; | 360 |
358 expire = 0; | 361 if (ngx_accept_mutex_held) { |
359 } | 362 accept_lock = 1; |
360 } | 363 |
361 | 364 } else if (timer == NGX_TIMER_INFINITE |
362 ngx_old_elapsed_msec = ngx_elapsed_msec; | 365 || timer > ngx_accept_mutex_delay) |
366 { | |
367 timer = ngx_accept_mutex_delay; | |
368 expire = 0; | |
369 } | |
370 } | |
371 } | |
363 | 372 |
364 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 373 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
365 "devpoll timer: %d", timer); | 374 "devpoll timer: %d", timer); |
366 | 375 |
367 if (nchanges) { | 376 if (nchanges) { |
491 c->read->event_handler(c->read); | 500 c->read->event_handler(c->read); |
492 | 501 |
493 } else if (!c->read->accept) { | 502 } else if (!c->read->accept) { |
494 ngx_post_event(c->read); | 503 ngx_post_event(c->read); |
495 | 504 |
496 } else { | 505 } else if (ngx_accept_disabled <= 0) { |
497 ngx_mutex_unlock(ngx_posted_events_mutex); | 506 ngx_mutex_unlock(ngx_posted_events_mutex); |
498 | 507 |
499 c->read->event_handler(c->read); | 508 c->read->event_handler(c->read); |
509 | |
510 if (ngx_accept_disabled > 0) { | |
511 ngx_accept_mutex_unlock(); | |
512 accept_lock = 0; | |
513 } | |
500 | 514 |
501 if (i + 1 == events) { | 515 if (i + 1 == events) { |
502 lock = 0; | 516 lock = 0; |
503 break; | 517 break; |
504 } | 518 } |
505 | 519 |
506 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | 520 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { |
507 ngx_accept_mutex_unlock(); | 521 if (accept_lock) { |
522 ngx_accept_mutex_unlock(); | |
523 } | |
508 return NGX_ERROR; | 524 return NGX_ERROR; |
509 } | 525 } |
510 } | 526 } |
511 } | 527 } |
512 } | 528 } |
513 | 529 |
530 if (accept_lock) { | |
531 ngx_accept_mutex_unlock(); | |
532 } | |
533 | |
514 if (lock) { | 534 if (lock) { |
515 ngx_mutex_unlock(ngx_posted_events_mutex); | 535 ngx_mutex_unlock(ngx_posted_events_mutex); |
516 } | 536 } |
517 | 537 |
518 ngx_accept_mutex_unlock(); | |
519 | |
520 if (expire && delta) { | 538 if (expire && delta) { |
521 ngx_event_expire_timers((ngx_msec_t) delta); | 539 ngx_event_expire_timers((ngx_msec_t) delta); |
522 } | 540 } |
523 | 541 |
524 if (!ngx_threaded) { | 542 if (!ngx_threaded) { |