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