Mercurial > hg > nginx-quic
diff src/event/modules/ngx_kqueue_module.c @ 113:d7f606e25b99
nginx-0.0.1-2003-07-04-19:10:33 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 04 Jul 2003 15:10:33 +0000 |
parents | da763a85be66 |
children | ac69ab96328d |
line wrap: on
line diff
--- 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_ct 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->event 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->event } 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->event } 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->event } -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);