Mercurial > hg > nginx
diff src/event/modules/ngx_aio_module.c @ 93:738fe44c70d5
nginx-0.0.1-2003-05-21-17:28:21 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 21 May 2003 13:28:21 +0000 |
parents | 637625a2acdb |
children | 8220378432a8 |
line wrap: on
line diff
--- a/src/event/modules/ngx_aio_module.c +++ b/src/event/modules/ngx_aio_module.c @@ -1,39 +1,109 @@ #include <ngx_config.h> - #include <ngx_core.h> -#include <ngx_types.h> -#include <ngx_log.h> -#include <ngx_connection.h> #include <ngx_event.h> -#include <ngx_event_timer.h> +#include <ngx_aio.h> #if (HAVE_KQUEUE) #include <ngx_kqueue_module.h> #endif -int ngx_aio_init(int max_connections, ngx_log_t *log) -{ +static int ngx_aio_init(ngx_log_t *log); +static void ngx_aio_done(ngx_log_t *log); +static int ngx_aio_add_event(ngx_event_t *ev, int event, u_int flags); +static int ngx_aio_del_event(ngx_event_t *ev, int event, u_int flags); +static int ngx_aio_process_events(ngx_log_t *log); + + +ngx_os_io_t ngx_os_aio = { + ngx_aio_read, + NULL, + ngx_aio_write, + ngx_aio_write_chain, + NGX_HAVE_ZEROCOPY +}; + + +static ngx_str_t aio_name = ngx_string("aio"); + +ngx_event_module_t ngx_aio_module_ctx = { + NGX_EVENT_MODULE, + &aio_name, + NULL, /* create configuration */ + NULL, /* init configuration */ + + { + ngx_aio_add_event, /* add an event */ + ngx_aio_del_event, /* delete an event */ + NULL, /* enable an event */ + NULL, /* disable an event */ + NULL, /* add an connection */ + NULL, /* delete an connection */ + ngx_aio_process_events, /* process the events */ + ngx_aio_init, /* init the events */ + ngx_aio_done /* done the events */ + } + +}; + +ngx_module_t ngx_aio_module = { + &ngx_aio_module_ctx, /* module context */ + 0, /* module index */ + NULL, /* module directives */ + NGX_EVENT_MODULE_TYPE, /* module type */ + NULL /* init module */ +}; + + + #if (HAVE_KQUEUE) - int rc; - - rc = ngx_kqueue_init(max_connections, log); +static int ngx_aio_init(ngx_log_t *log) +{ + if (ngx_kqueue_module_ctx.actions.init(log) == NGX_ERROR) { + return NGX_ERROR; + } ngx_event_flags = NGX_HAVE_AIO_EVENT|NGX_USE_AIO_EVENT; - ngx_write_chain_proc = ngx_aio_write_chain; + ngx_event_actions = ngx_aio_module_ctx.actions; + ngx_io = ngx_os_aio; - return rc; -#endif + return NGX_OK; } +static void ngx_aio_done(ngx_log_t *log) +{ + ngx_kqueue_module_ctx.actions.done(log); +} +/* The event adding and deleteing are needed for the listening sockets */ + +static int ngx_aio_add_event(ngx_event_t *ev, int event, u_int flags) +{ + return ngx_kqueue_module_ctx.actions.add(ev, event, flags); +} + + +static int ngx_aio_del_event(ngx_event_t *ev, int event, u_int flags) +{ + return ngx_kqueue_module_ctx.actions.del(ev, event, flags); +} + + +static int ngx_aio_process_events(ngx_log_t *log) +{ + return ngx_kqueue_module_ctx.actions.process(log); +} + +#endif + #if 0 + /* 1 */ int ngx_posix_aio_process_events(ngx_log_t *log) { @@ -66,6 +136,7 @@ int ngx_posix_aio_process_events(ngx_log /* 3 */ int ngx_posix_aio_process_events(ngx_log_t *log) { +#if 0 unmask signal /* BUG: AIO signal can be delivered before select() */ @@ -73,6 +144,9 @@ int ngx_posix_aio_process_events(ngx_log select(listen); mask signal +#endif + + pselect(listen, mask); if (ngx_socket_errno == NGX_EINTR) look ready array @@ -82,4 +156,5 @@ void aio_sig_handler(int signo, siginfo_ { push siginfo->si_value.sival_ptr } + #endif