One Level Up
Top Level
src/event/modules/ngx_aio_module.c - nginx-1.7.10
Global variables defined
Functions defined
Source code
- #include <ngx_config.h>
- #include <ngx_core.h>
- #include <ngx_event.h>
- extern ngx_event_module_t ngx_kqueue_module_ctx;
- static ngx_int_t ngx_aio_init(ngx_cycle_t *cycle, ngx_msec_t timer);
- static void ngx_aio_done(ngx_cycle_t *cycle);
- static ngx_int_t ngx_aio_add_event(ngx_event_t *ev, ngx_int_t event,
- ngx_uint_t flags);
- static ngx_int_t ngx_aio_del_event(ngx_event_t *ev, ngx_int_t event,
- ngx_uint_t flags);
- static ngx_int_t ngx_aio_del_connection(ngx_connection_t *c, ngx_uint_t flags);
- static ngx_int_t ngx_aio_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
- ngx_uint_t flags);
- ngx_os_io_t ngx_os_aio = {
- ngx_aio_read,
- ngx_aio_read_chain,
- NULL,
- ngx_aio_write,
- ngx_aio_write_chain,
- 0
- };
- static ngx_str_t aio_name = ngx_string("aio");
- ngx_event_module_t ngx_aio_module_ctx = {
- &aio_name,
- NULL,
- NULL,
- {
- ngx_aio_add_event,
- ngx_aio_del_event,
- NULL,
- NULL,
- NULL,
- ngx_aio_del_connection,
- NULL,
- ngx_aio_process_events,
- ngx_aio_init,
- ngx_aio_done
- }
- };
- ngx_module_t ngx_aio_module = {
- NGX_MODULE_V1,
- &ngx_aio_module_ctx,
- NULL,
- NGX_EVENT_MODULE,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NGX_MODULE_V1_PADDING
- };
- #if (NGX_HAVE_KQUEUE)
- static ngx_int_t
- ngx_aio_init(ngx_cycle_t *cycle, ngx_msec_t timer)
- {
- if (ngx_kqueue_module_ctx.actions.init(cycle, timer) == NGX_ERROR) {
- return NGX_ERROR;
- }
- ngx_io = ngx_os_aio;
- ngx_event_flags = NGX_USE_AIO_EVENT;
- ngx_event_actions = ngx_aio_module_ctx.actions;
- return NGX_OK;
- }
- static void
- ngx_aio_done(ngx_cycle_t *cycle)
- {
- ngx_kqueue_module_ctx.actions.done(cycle);
- }
- static ngx_int_t
- ngx_aio_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
- {
- return ngx_kqueue_module_ctx.actions.add(ev, event, flags);
- }
- static ngx_int_t
- ngx_aio_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
- {
- return ngx_kqueue_module_ctx.actions.del(ev, event, flags);
- }
- static ngx_int_t
- ngx_aio_del_connection(ngx_connection_t *c, ngx_uint_t flags)
- {
- int rc;
- if (c->read->active == 0 && c->write->active == 0) {
- return NGX_OK;
- }
- if (flags & NGX_CLOSE_EVENT) {
- return NGX_OK;
- }
- rc = aio_cancel(c->fd, NULL);
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "aio_cancel: %d", rc);
- if (rc == AIO_CANCELED) {
- c->read->active = 0;
- c->write->active = 0;
- return NGX_OK;
- }
- if (rc == AIO_ALLDONE) {
- c->read->active = 0;
- c->write->active = 0;
- ngx_log_error(NGX_LOG_ALERT, c->log, 0,
- "aio_cancel() returned AIO_ALLDONE");
- return NGX_OK;
- }
- if (rc == -1) {
- ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
- "aio_cancel() failed");
- return NGX_ERROR;
- }
- if (rc == AIO_NOTCANCELED) {
- ngx_log_error(NGX_LOG_ALERT, c->log, 0,
- "aio_cancel() returned AIO_NOTCANCELED");
- return NGX_ERROR;
- }
- return NGX_OK;
- }
- static ngx_int_t
- ngx_aio_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
- {
- return ngx_kqueue_module_ctx.actions.process_events(cycle, timer, flags);
- }
- #endif
One Level Up
Top Level