diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-07-04 15:10:33 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-07-04 15:10:33 +0000 |
commit | 340b03b201c77f394cc70fda4d960ad6c3b68905 (patch) | |
tree | c4a4fd6a958f2ae6c5ebed768e2c461197219df2 /src/event/modules/ngx_kqueue_module.c | |
parent | be3c2b69a4c18e3810b1ed1ba407f0be37230c27 (diff) | |
download | nginx-340b03b201c77f394cc70fda4d960ad6c3b68905.tar.gz nginx-340b03b201c77f394cc70fda4d960ad6c3b68905.zip |
nginx-0.0.1-2003-07-04-19:10:33 import
Diffstat (limited to 'src/event/modules/ngx_kqueue_module.c')
-rw-r--r-- | src/event/modules/ngx_kqueue_module.c | 175 |
1 files changed, 20 insertions, 155 deletions
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index 51df43bb2..bdd1ff4c3 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -11,16 +11,13 @@ typedef struct { - int kqueue; - struct kevent *change_list; u_int changes; - struct kevent *event_list; u_int events; } ngx_kqueue_conf_t; -static int ngx_kqueue_init(ngx_log_t *log); -static void ngx_kqueue_done(ngx_log_t *log); +static int ngx_kqueue_init(ngx_cycle_t *cycle); +static void ngx_kqueue_done(ngx_cycle_t *cycle); static int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags); 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); @@ -72,10 +69,6 @@ ngx_event_module_t ngx_kqueue_module_ctx = { NULL, /* delete an connection */ ngx_kqueue_process_events, /* process the events */ ngx_kqueue_init, /* init the events */ -#if 0 - ngx_kqueue_commit, /* commit the events */ - ngx_kqueue_rollback, /* rollback the events */ -#endif ngx_kqueue_done /* done the events */ } @@ -87,158 +80,27 @@ ngx_module_t ngx_kqueue_module = { ngx_kqueue_commands, /* module directives */ NGX_EVENT_MODULE, /* module type */ NULL, /* init module */ - NULL, /* commit module */ - NULL, /* rollback module */ -#if 0 NULL /* init child */ -#endif }; -#if 0 -static int ngx_kqueue_init(ngx_cycle_t *cycle, ngx_log_t *log) +static int ngx_kqueue_init(ngx_cycle_t *cycle) { struct timespec ts; ngx_kqueue_conf_t *kcf; kcf = ngx_event_get_conf(cycle->conf_ctx, ngx_kqueue_module); -ngx_log_debug(log, "CH: %d" _ kcf->changes); -ngx_log_debug(log, "EV: %d" _ kcf->events); - - if (ngx_kqueue == -1) { - kcf->kqueue = kqueue(); - - if (kcf->kqueue == -1) { - ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "kqueue() failed"); - return NGX_ERROR; - } - - } else { - kcf->kqueue = ngx_kqueue; - } - - if (max_changes < kcf->changes) { - if (nchanges) { - ts.tv_sec = 0; - ts.tv_nsec = 0; - - if (kevent(ngx_kqueue, change_list, nchanges, NULL, 0, &ts) == -1) { - ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent() failed"); - return NGX_ERROR; - } - - nchanges = 0; - } - - ngx_test_null(kcf->change_list, - ngx_alloc(kcf->changes * sizeof(struct kevent), log), - NGX_ERROR); - - } else { - kcf->change_list = change_list; - } - - if (nevents < kcf->events) { - ngx_test_null(kcf->event_list, - ngx_alloc(kcf->events * sizeof(struct kevent), log), - NGX_ERROR); - } else { - kcf->event_list = event_list; - } - - if (ngx_event_timer_init(cycle, log) == NGX_ERROR) { - return NGX_ERROR; - } - - return NGX_OK; -} - - -static void ngx_kqueue_commit(ngx_cycle_t *cycle, ngx_log_t *log) -{ - ngx_kqueue_conf_t *kcf; - - kcf = ngx_event_get_conf(cycle->conf_ctx, ngx_kqueue_module); - - ngx_kqueue = kcf->kqueue; - - if (change_list != kcf->change_list) { - ngx_free(change_list); - change_list = kcf->change_list; - } - - max_changes = kcf->changes; - - if (event_list != kcf->event_list) { - ngx_free(event_list); - event_list = kcf->event_list; - } - - nevents = kcf->events; - - ngx_event_timer_commit(cycle, log); - - ngx_event_actions = ngx_kqueue_module_ctx.actions; - ngx_io = ngx_os_io; - - ngx_event_flags = NGX_HAVE_LEVEL_EVENT - |NGX_HAVE_ONESHOT_EVENT -#if (HAVE_CLEAR_EVENT) - |NGX_HAVE_CLEAR_EVENT -#else - |NGX_USE_LEVEL_EVENT -#endif -#if (HAVE_LOWAT_EVENT) - |NGX_HAVE_LOWAT_EVENT -#endif - |NGX_HAVE_KQUEUE_EVENT; -} - - -static void ngx_kqueue_rollback(ngx_cycle_t *cycle, ngx_log_t *log) -{ - ngx_kqueue_conf_t *kcf; - - kcf = ngx_event_get_conf(cycle->conf_ctx, ngx_kqueue_module); - - if (ngx_kqueue == -1) { - if (close(kcf->kqueue) == -1) { - ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, - "kqueue close() failed"); - } - } - - if (change_list != kcf->change_list) { - ngx_free(kcf->change_list); - } - - if (event_list != kcf->event_list) { - ngx_free(kcf->event_list); - } - - ngx_event_timer_rollback(cycle, log); -} - -#endif - - -static int ngx_kqueue_init(ngx_log_t *log) -{ - struct timespec ts; - ngx_kqueue_conf_t *kcf; - - kcf = ngx_event_get_conf(ngx_kqueue_module); - -ngx_log_debug(log, "CH: %d" _ kcf->changes); -ngx_log_debug(log, "EV: %d" _ kcf->events); +ngx_log_debug(cycle->log, "CH: %d" _ kcf->changes); +ngx_log_debug(cycle->log, "EV: %d" _ kcf->events); if (ngx_kqueue == -1) { ngx_kqueue = kqueue(); if (ngx_kqueue == -1) { - ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "kqueue() failed"); + ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, + "kqueue() failed"); return NGX_ERROR; } } @@ -249,9 +111,11 @@ ngx_log_debug(log, "EV: %d" _ kcf->events); ts.tv_nsec = 0; if (kevent(ngx_kqueue, change_list, nchanges, NULL, 0, &ts) == -1) { - ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent() failed"); + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "kevent() failed"); return NGX_ERROR; } + nchanges = 0; } if (change_list) { @@ -259,12 +123,12 @@ ngx_log_debug(log, "EV: %d" _ kcf->events); } ngx_test_null(change_list, - ngx_alloc(kcf->changes * sizeof(struct kevent), log), + ngx_alloc(kcf->changes * sizeof(struct kevent), + cycle->log), NGX_ERROR); } max_changes = kcf->changes; - nchanges = 0; if (nevents < kcf->events) { if (event_list) { @@ -272,18 +136,18 @@ ngx_log_debug(log, "EV: %d" _ kcf->events); } ngx_test_null(event_list, - ngx_alloc(kcf->events * sizeof(struct kevent), log), + ngx_alloc(kcf->events * sizeof(struct kevent), + cycle->log), NGX_ERROR); } nevents = kcf->events; - if (ngx_event_timer_init(log) == NGX_ERROR) { + if (ngx_event_timer_init(cycle) == NGX_ERROR) { return NGX_ERROR; } - /* TODO: re-add active events with new udata - if ecf->connections was increased */ + ngx_io = ngx_os_io; ngx_event_actions = ngx_kqueue_module_ctx.actions; @@ -303,15 +167,16 @@ ngx_log_debug(log, "EV: %d" _ kcf->events); } -static void ngx_kqueue_done(ngx_log_t *log) +static void ngx_kqueue_done(ngx_cycle_t *cycle) { if (close(ngx_kqueue) == -1) { - ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kqueue close() failed"); + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "kqueue close() failed"); } ngx_kqueue = -1; - ngx_event_timer_done(log); + ngx_event_timer_done(cycle); ngx_free(change_list); ngx_free(event_list); |