diff options
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/modules/ngx_kqueue_module.c | 18 | ||||
| -rw-r--r-- | src/event/ngx_event.c | 2 | ||||
| -rw-r--r-- | src/event/ngx_event.h | 2 |
3 files changed, 15 insertions, 7 deletions
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index 4e82162a4..e3c9e3a4f 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -27,8 +27,9 @@ static ngx_event_t timer_queue; int ngx_kqueue_init(int max_connections, ngx_log_t *log) { - int size = sizeof(struct kevent) * 512; + int size; + size = sizeof(struct kevent) * 512; nchanges = 0; nevents = 512; @@ -68,8 +69,9 @@ int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) { ngx_event_t *e; - if (ev->index < nchanges && change_list[ev->index].udata == ev) { - + if (nchanges > 0 && ev->index < nchanges + && change_list[ev->index].udata == ev) + { ngx_connection_t *cn = (ngx_connection_t *) ev->data; ngx_log_debug(ev->log, "kqueue del event: %d: ft:%d" _ cn->fd _ event); @@ -92,8 +94,10 @@ int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) { - struct timespec ts = { 0, 0 }; - ngx_connection_t *cn = (ngx_connection_t *) ev->data; + struct timespec ts; + ngx_connection_t *cn; + + cn = (ngx_connection_t *) ev->data; ngx_log_debug(ev->log, "kqueue set event: %d: ft:%d f:%08x" _ cn->fd _ filter _ flags); @@ -102,6 +106,9 @@ int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) ngx_log_error(NGX_LOG_WARN, ev->log, 0, "kqueue change list is filled up"); + ts.tv_sec = 0; + ts.tv_nsec = 0; + if (kevent(kq, change_list, nchanges, NULL, 0, &ts) == -1) { ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent failed"); return NGX_ERROR; @@ -149,6 +156,7 @@ int ngx_kqueue_process_events(ngx_log_t *log) ngx_log_debug(log, "kevent timer: %d" _ timer); events = kevent(kq, change_list, nchanges, event_list, nevents, tp); + if (events == -1) { ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent failed"); return NGX_ERROR; diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index 763b8f8d2..8517e644a 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -22,7 +22,7 @@ ngx_event_t *ngx_read_events, *ngx_write_events; #if !(USE_KQUEUE) -#if 1 +#if 0 ngx_event_type_e ngx_event_type = NGX_SELECT_EVENT; #else ngx_event_type_e ngx_event_type = NGX_KQUEUE_EVENT; diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index 1748e9a64..6aa01660b 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -135,7 +135,7 @@ NGX_CLOSE_EVENT kqueue: kqueue deletes events for file that closed #define ngx_init_events ngx_kqueue_init #define ngx_process_events ngx_kqueue_process_events #define ngx_add_event ngx_kqueue_add_event -#define ngx_del_event ngx_kqueue_add_event +#define ngx_del_event ngx_kqueue_del_event #define ngx_add_timer ngx_kqueue_add_timer #define ngx_event_recv ngx_event_recv_core |
