nginx-0.0.1-2003-05-21-17:28:21 import
diff --git a/src/event/modules/ngx_aio_module.c b/src/event/modules/ngx_aio_module.c
index 20cb1a6..24d049f 100644
--- 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 @@
/* 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 @@
select(listen);
mask signal
+#endif
+
+ pselect(listen, mask);
if (ngx_socket_errno == NGX_EINTR)
look ready array
@@ -82,4 +156,5 @@
{
push siginfo->si_value.sival_ptr
}
+
#endif
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index 72efda4..531e96a 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -10,7 +10,7 @@
#include <ngx_event.h>
-#if (TEST_DEVPOLL)
+#if (TEST_BUILD_DEVPOLL)
/* Solaris declarations */
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 81475f7..b8398b5 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -66,7 +66,7 @@
NULL, /* delete an connection */
ngx_kqueue_process_events, /* process the events */
ngx_kqueue_init, /* init the events */
- ngx_kqueue_done, /* done the events */
+ ngx_kqueue_done /* done the events */
}
};
@@ -343,22 +343,23 @@
}
ev = (ngx_event_t *) event_list[i].udata;
- instance = (uintptr_t) ev & 1;
- ev = (void *) ((uintptr_t) ev & ~1);
-
- /* It's a stale event from a file descriptor
- that was just closed in this iteration */
-
- if (ev->active == 0 || ev->instance != instance) {
- ngx_log_debug(log, "stale kevent");
- continue;
- }
switch (event_list[i].filter) {
case EVFILT_READ:
case EVFILT_WRITE:
+ instance = (uintptr_t) ev & 1;
+ ev = (void *) ((uintptr_t) ev & ~1);
+
+ /* It's a stale event from a file descriptor
+ that was just closed in this iteration */
+
+ if (ev->active == 0 || ev->instance != instance) {
+ ngx_log_debug(log, "stale kevent");
+ continue;
+ }
+
ev->available = event_list[i].data;
if (event_list[i].flags & EV_EOF) {
diff --git a/src/event/modules/ngx_kqueue_module.h b/src/event/modules/ngx_kqueue_module.h
index 4f41ae7..72b85d2 100644
--- a/src/event/modules/ngx_kqueue_module.h
+++ b/src/event/modules/ngx_kqueue_module.h
@@ -9,6 +9,8 @@
extern int ngx_kqueue;
+/* STUB */ extern ngx_event_module_t ngx_kqueue_module_ctx;
+
#endif /* _NGX_KQUEUE_MODULE_H_INCLUDED_ */