Mercurial > hg > nginx
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 |