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);