comparison src/event/modules/ngx_kqueue_module.c @ 316:a0beefedaf94

nginx-0.0.3-2004-04-15-00:34:05 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 14 Apr 2004 20:34:05 +0000
parents 39b6f2df45c0
children 1308b98496a2
comparison
equal deleted inserted replaced
315:39b6f2df45c0 316:a0beefedaf94
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;
354 struct timespec ts, *tp; 354 struct timespec ts, *tp;
355 355
356 timer = ngx_event_find_timer(); 356 for ( ;; ) {
357 timer = ngx_event_find_timer();
357 358
358 #if (NGX_THREADS) 359 #if (NGX_THREADS)
359 if (timer == NGX_TIMER_ERROR) { 360 if (timer == NGX_TIMER_ERROR) {
360 return NGX_ERROR; 361 return NGX_ERROR;
361 } 362 }
362 363
363 /* 364 /*
364 * TODO: if timer is 0 and any worker thread is still busy 365 * TODO: if timer is NGX_TIMER_INFINITE and any worker thread
365 * then set 500 ms timeout 366 * is still busy then set the configurable 500ms timeout
366 */ 367 * to wake up another worker thread
368 */
367 369
368 #endif 370 #endif
371
372 if (timer != 0) {
373 break;
374 }
375
376 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
377 "kevent expired timer");
378
379 ngx_event_expire_timers(0);
380
381 /* TODO: if ngx_threaded then wake up the worker thread */
382 }
369 383
370 ngx_old_elapsed_msec = ngx_elapsed_msec; 384 ngx_old_elapsed_msec = ngx_elapsed_msec;
371 expire = 1; 385 expire = 1;
372 386
373 if (ngx_accept_mutex) { 387 if (ngx_accept_mutex) {
374 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { 388 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
375 return NGX_ERROR; 389 return NGX_ERROR;
376 } 390 }
377 391
378 if (ngx_accept_mutex_held == 0 392 if (ngx_accept_mutex_held == 0
379 && (timer == 0 || timer > ngx_accept_mutex_delay)) 393 && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay))
380 { 394 {
381 timer = ngx_accept_mutex_delay; 395 timer = ngx_accept_mutex_delay;
382 expire = 0; 396 expire = 0;
383 } 397 }
384 } 398 }
385 399
386 if (timer == -1) { 400 if (timer == NGX_TIMER_INFINITE) {
387 ts.tv_sec = 0; 401 tp = NULL;
388 ts.tv_nsec = 0; 402 expire = 0;
389 tp = &ts; 403
390 404 } else {
391 } else if (timer) {
392 ts.tv_sec = timer / 1000; 405 ts.tv_sec = timer / 1000;
393 ts.tv_nsec = (timer % 1000) * 1000000; 406 ts.tv_nsec = (timer % 1000) * 1000000;
394 tp = &ts; 407 tp = &ts;
395
396 } else {
397 tp = NULL;
398 expire = 0;
399 } 408 }
400 409
401 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 410 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
402 "kevent timer: %d", timer); 411 "kevent timer: %d", timer);
403 412
425 cycle->log, err, "kevent() failed"); 434 cycle->log, err, "kevent() failed");
426 ngx_accept_mutex_unlock(); 435 ngx_accept_mutex_unlock();
427 return NGX_ERROR; 436 return NGX_ERROR;
428 } 437 }
429 438
430 if (timer) { 439 if (timer != NGX_TIMER_INFINITE) {
431 delta = ngx_elapsed_msec - delta; 440 delta = ngx_elapsed_msec - delta;
432 441
433 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 442 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
434 "kevent timer: %d, delta: %d", timer, (int) delta); 443 "kevent timer: %d, delta: %d", timer, (int) delta);
435 444
547 if (lock) { 556 if (lock) {
548 ngx_mutex_unlock(ngx_posted_events_mutex); 557 ngx_mutex_unlock(ngx_posted_events_mutex);
549 } 558 }
550 559
551 ngx_accept_mutex_unlock(); 560 ngx_accept_mutex_unlock();
561
562 /* TODO: wake up worker thread */
552 563
553 if (expire && delta) { 564 if (expire && delta) {
554 ngx_event_expire_timers((ngx_msec_t) delta); 565 ngx_event_expire_timers((ngx_msec_t) delta);
555 } 566 }
556 567