Mercurial > hg > nginx-quic
diff src/event/modules/ngx_kqueue_module.c @ 306:6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 04 Apr 2004 20:32:09 +0000 |
parents | 4b1a3a4acc60 |
children | ce375c313e96 |
line wrap: on
line diff
--- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -22,9 +22,6 @@ static int ngx_kqueue_add_event(ngx_even static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags); static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags); static int ngx_kqueue_process_events(ngx_cycle_t *cycle); -#if (NGX_THREADS) -static void ngx_kqueue_thread_handler(ngx_event_t *ev); -#endif static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle); static char *ngx_kqueue_init_conf(ngx_cycle_t *cycle, void *conf); @@ -71,9 +68,6 @@ ngx_event_module_t ngx_kqueue_module_ct NULL, /* add an connection */ NULL, /* delete an connection */ ngx_kqueue_process_events, /* process the events */ -#if (NGX_THREADS0) - ngx_kqueue_thread_handler, /* process an event by thread */ -#endif ngx_kqueue_init, /* init the events */ ngx_kqueue_done /* done the events */ } @@ -161,6 +155,7 @@ static int ngx_kqueue_init(ngx_cycle_t * #if (HAVE_LOWAT_EVENT) |NGX_HAVE_LOWAT_EVENT #endif + |NGX_HAVE_INSTANCE_EVENT |NGX_HAVE_KQUEUE_EVENT; return NGX_OK; @@ -346,8 +341,8 @@ static int ngx_kqueue_set_event(ngx_even static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle) { int events; - ngx_int_t i; - ngx_uint_t instance; + ngx_int_t i, instance; + ngx_uint_t lock, expire; ngx_err_t err; ngx_msec_t timer; ngx_event_t *ev; @@ -364,23 +359,25 @@ static ngx_int_t ngx_kqueue_process_even /* * TODO: if timer is 0 and any worker thread is still busy - * then set 1 second timeout + * then set 500 ms timeout */ #endif ngx_old_elapsed_msec = ngx_elapsed_msec; + expire = 1; if (ngx_accept_mutex) { if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { return NGX_ERROR; } -#if 1 - if (ngx_accept_mutex_held == 0 && timer == 0) { - /* STUB */ timer = 500; + if (ngx_accept_mutex_held == 0 + && (timer == 0 || timer > ngx_accept_mutex_delay)) + { + timer = ngx_accept_mutex_delay; + expire = 0; } -#endif } if (timer) { @@ -390,6 +387,7 @@ static ngx_int_t ngx_kqueue_process_even } else { tp = NULL; + expire = 0; } ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, @@ -441,6 +439,8 @@ static ngx_int_t ngx_kqueue_process_even return NGX_ERROR; } + lock = 1; + for (i = 0; i < events; i++) { ngx_log_debug6(NGX_LOG_DEBUG_EVENT, cycle->log, 0, @@ -517,106 +517,49 @@ static ngx_int_t ngx_kqueue_process_even continue; } - - if (ngx_threaded || ngx_accept_mutex_held) { - - if (ev->accept) { - ngx_mutex_unlock(ngx_posted_events_mutex); - - ev->event_handler(ev); + if (!ngx_threaded && !ngx_accept_mutex_held) { + ev->event_handler(ev); + continue; + } - if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { - ngx_accept_mutex_unlock(); - return NGX_ERROR; - } - - } else { - ev->next = (ngx_event_t *) ngx_posted_events; - ngx_posted_events = ev; - } - + if (!ev->accept) { + ngx_post_event(ev); continue; } + ngx_mutex_unlock(ngx_posted_events_mutex); + ev->event_handler(ev); + + if (i + 1 == events) { + lock = 0; + break; + } + + if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { + ngx_accept_mutex_unlock(); + return NGX_ERROR; + } } - ngx_mutex_unlock(ngx_posted_events_mutex); + if (lock) { + ngx_mutex_unlock(ngx_posted_events_mutex); + } ngx_accept_mutex_unlock(); - if (timer && delta) { + if (expire && delta) { ngx_event_expire_timers((ngx_msec_t) delta); } - if (ngx_threaded) { - return NGX_OK; - } - - for ( ;; ) { - - ev = (ngx_event_t *) ngx_posted_events; - - ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, - "kevent: posted event " PTR_FMT, ev); - - if (ev == NULL) { - break; - } - - ngx_posted_events = ev->next; - - if ((!ev->posted && !ev->active) - || ev->instance != ev->returned_instance) - { - /* - * the stale event from a file descriptor - * that was just closed in this iteration - */ - - ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, - "kevent: stale event " PTR_FMT, ev); - continue; - } - - if (ev->posted) { - ev->posted = 0; - } - - ev->event_handler(ev); + if (!ngx_threaded) { + ngx_event_process_posted(cycle); } return NGX_OK; } -#if (NGX_THREADS) - -static void ngx_kqueue_thread_handler(ngx_event_t *ev) -{ - if ((!ev->posted && !ev->active) - || ev->instance != ev->returned_instance) - { - /* - * the stale event from a file descriptor - * that was just closed in this iteration - */ - - ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0, - "kevent: stale event " PTR_FMT, ev); - return; - } - - if (ev->posted) { - ev->posted = 0; - } - - ev->event_handler(ev); -} - -#endif - - static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle) { ngx_kqueue_conf_t *kcf;