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