Mercurial > hg > nginx
diff src/event/modules/ngx_kqueue_module.c @ 271:e16dfb9b9afa
nginx-0.0.2-2004-02-26-20:10:01 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 26 Feb 2004 17:10:01 +0000 |
parents | 7bb9562216ce |
children | d4e65d74db9f |
line wrap: on
line diff
--- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -413,6 +413,12 @@ static ngx_int_t ngx_kqueue_process_even } } +#if (NGX_THREADS0) + if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { + return NGX_ERROR; + } +#endif + for (i = 0; i < events; i++) { ngx_log_debug6(NGX_LOG_DEBUG_EVENT, log, 0, @@ -468,41 +474,109 @@ static ngx_int_t ngx_kqueue_process_even ev->ready = 1; - ev->event_handler(ev); - break; case EVFILT_VNODE: ev->kq_vnode = 1; - ev->event_handler(ev); - break; case EVFILT_AIO: ev->complete = 1; ev->ready = 1; - ev->event_handler(ev); - break; - default: ngx_log_error(NGX_LOG_ALERT, log, 0, "unexpected kevent() filter %d", event_list[i].filter); + continue; } + +#if (NGX_THREADS0) + + if (ngx_threaded) { + + if (ev->light) { + + /* the accept event */ + + ngx_mutex_unlock(ngx_posted_events_mutex); + + ev->event_handler(ev); + + if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { + return NGX_ERROR; + } + + } else { + ev->next = ngx_posted_events; + ngx_posted_events = ev; + } + + continue; + } + +#endif + + ev->event_handler(ev); } +#if (NGX_THREADS0) + ngx_mutex_unlock(ngx_posted_events_mutex); +#endif + if (timer && delta) { ngx_event_expire_timers((ngx_msec_t) delta); } +#if (NGX_THREADS0) + if (!ngx_threaded) { + } +#endif + + /* TODO: non-thread mode only */ + + ev = ngx_posted_events; + ngx_posted_events = NULL; + + while (ev) { + ev->event_handler(ev); + ev = ev->next; + } + return NGX_OK; } +#if (NGX_THREADS) + +static void ngx_kqueue_thread_handler(ngx_event_t *ev) +{ + ngx_int_t instance; + + instance = (uintptr_t) ev & 1; + ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1); + + if (ev->active == 0 || ev->instance != 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; + } + + ev->event_handler(ev); +} + +#endif + + static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle) { ngx_kqueue_conf_t *kcf;