Mercurial > hg > nginx-vendor-current
diff src/event/modules/ngx_kqueue_module.c @ 332:3a91bfeffaba NGINX_0_6_10
nginx 0.6.10
*) Feature: the "open_file_cache", "open_file_cache_retest", and
"open_file_cache_errors" directives.
*) Bugfix: socket leak; bug appeared in 0.6.7.
*) Bugfix: a charset set by the "charset" directive was not appended to
the "Content-Type" header set by $r->send_http_header().
*) Bugfix: a segmentation fault might occur in worker process if
/dev/poll method was used.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 03 Sep 2007 00:00:00 +0400 |
parents | f7cd062ee035 |
children | 820f6378fc00 |
line wrap: on
line diff
--- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -200,7 +200,9 @@ ngx_kqueue_init(ngx_cycle_t *cycle, ngx_ } } - ngx_event_flags = 0; + ngx_event_flags = NGX_USE_ONESHOT_EVENT + |NGX_USE_KQUEUE_EVENT + |NGX_USE_VNODE_EVENT; #if (NGX_HAVE_TIMER_EVENT) @@ -226,8 +228,6 @@ ngx_kqueue_init(ngx_cycle_t *cycle, ngx_ #endif - ngx_event_flags |= NGX_USE_ONESHOT_EVENT|NGX_USE_KQUEUE_EVENT; - #if (NGX_HAVE_CLEAR_EVENT) ngx_event_flags |= NGX_USE_CLEAR_EVENT; #else @@ -389,10 +389,12 @@ ngx_kqueue_del_event(ngx_event_t *ev, ng if (flags & NGX_DISABLE_EVENT) { ev->disabled = 1; + + } else { + flags |= EV_DELETE; } - rc = ngx_kqueue_set_event(ev, event, - flags & NGX_DISABLE_EVENT ? EV_DISABLE : EV_DELETE); + rc = ngx_kqueue_set_event(ev, event, flags); ngx_mutex_unlock(list_mutex); @@ -409,7 +411,7 @@ ngx_kqueue_set_event(ngx_event_t *ev, ng c = ev->data; - ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, "kevent set event: %d: ft:%i fl:%04Xi", c->fd, filter, flags); @@ -466,6 +468,22 @@ ngx_kqueue_set_event(ngx_event_t *ev, ng ev->index = nchanges; nchanges++; + if (flags & NGX_FLUSH_EVENT) { + ts.tv_sec = 0; + ts.tv_nsec = 0; + + ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, 0, "kevent flush"); + + if (kevent(ngx_kqueue, change_list, (int) nchanges, NULL, 0, &ts) + == -1) + { + ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent() failed"); + return NGX_ERROR; + } + + nchanges = 0; + } + return NGX_OK; }