Mercurial > hg > nginx
comparison src/event/modules/ngx_kqueue_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 | 2e3cbc1bbe3c |
comparison
equal
deleted
inserted
replaced
322:ab2f8c9a2a45 | 323:ba876b26b76d |
---|---|
343 | 343 |
344 static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle) | 344 static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle) |
345 { | 345 { |
346 int events; | 346 int events; |
347 ngx_int_t i, instance; | 347 ngx_int_t i, instance; |
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_msec_t timer; | 350 ngx_msec_t timer; |
351 ngx_event_t *ev; | 351 ngx_event_t *ev; |
352 ngx_epoch_msec_t delta; | 352 ngx_epoch_msec_t delta; |
353 struct timeval tv; | 353 struct timeval tv; |
382 /* TODO: if ngx_threaded then wake up the worker thread */ | 382 /* TODO: if ngx_threaded then wake up the worker thread */ |
383 } | 383 } |
384 | 384 |
385 ngx_old_elapsed_msec = ngx_elapsed_msec; | 385 ngx_old_elapsed_msec = ngx_elapsed_msec; |
386 expire = 1; | 386 expire = 1; |
387 accept_lock = 0; | |
387 | 388 |
388 if (ngx_accept_mutex) { | 389 if (ngx_accept_mutex) { |
389 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { | 390 if (ngx_accept_disabled > 0) { |
390 return NGX_ERROR; | 391 ngx_accept_disabled--; |
391 } | 392 |
392 | 393 } else { |
393 if (ngx_accept_mutex_held == 0 | 394 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { |
394 && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay)) | 395 return NGX_ERROR; |
395 { | 396 } |
396 timer = ngx_accept_mutex_delay; | 397 |
397 expire = 0; | 398 if (ngx_accept_mutex_held) { |
399 accept_lock = 1; | |
400 | |
401 } else if (timer == NGX_TIMER_INFINITE | |
402 || timer > ngx_accept_mutex_delay) | |
403 { | |
404 timer = ngx_accept_mutex_delay; | |
405 expire = 0; | |
406 } | |
398 } | 407 } |
399 } | 408 } |
400 | 409 |
401 if (timer == NGX_TIMER_INFINITE) { | 410 if (timer == NGX_TIMER_INFINITE) { |
402 tp = NULL; | 411 tp = NULL; |
537 if (!ev->accept) { | 546 if (!ev->accept) { |
538 ngx_post_event(ev); | 547 ngx_post_event(ev); |
539 continue; | 548 continue; |
540 } | 549 } |
541 | 550 |
551 if (ngx_accept_disabled > 0) { | |
552 continue; | |
553 } | |
554 | |
542 ngx_mutex_unlock(ngx_posted_events_mutex); | 555 ngx_mutex_unlock(ngx_posted_events_mutex); |
543 | 556 |
544 ev->event_handler(ev); | 557 ev->event_handler(ev); |
558 | |
559 if (ngx_accept_disabled > 0) { | |
560 ngx_accept_mutex_unlock(); | |
561 accept_lock = 0; | |
562 } | |
545 | 563 |
546 if (i + 1 == events) { | 564 if (i + 1 == events) { |
547 lock = 0; | 565 lock = 0; |
548 break; | 566 break; |
549 } | 567 } |
550 | 568 |
551 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | 569 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { |
552 ngx_accept_mutex_unlock(); | 570 if (accept_lock) { |
571 ngx_accept_mutex_unlock(); | |
572 } | |
553 return NGX_ERROR; | 573 return NGX_ERROR; |
554 } | 574 } |
575 } | |
576 | |
577 if (accept_lock) { | |
578 ngx_accept_mutex_unlock(); | |
555 } | 579 } |
556 | 580 |
557 if (lock) { | 581 if (lock) { |
558 ngx_mutex_unlock(ngx_posted_events_mutex); | 582 ngx_mutex_unlock(ngx_posted_events_mutex); |
559 } | 583 } |
560 | |
561 ngx_accept_mutex_unlock(); | |
562 | 584 |
563 /* TODO: wake up worker thread */ | 585 /* TODO: wake up worker thread */ |
564 | 586 |
565 if (expire && delta) { | 587 if (expire && delta) { |
566 ngx_event_expire_timers((ngx_msec_t) delta); | 588 ngx_event_expire_timers((ngx_msec_t) delta); |