aboutsummaryrefslogtreecommitdiff
path: root/src/event/modules/ngx_aio_module.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/event/modules/ngx_aio_module.c')
-rw-r--r--src/event/modules/ngx_aio_module.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/event/modules/ngx_aio_module.c b/src/event/modules/ngx_aio_module.c
new file mode 100644
index 000000000..939c5c07e
--- /dev/null
+++ b/src/event/modules/ngx_aio_module.c
@@ -0,0 +1,37 @@
+
+int ngx_posix_aio_process_events(ngx_log_t *log)
+{
+ unmask signal
+
+ listen via signal;
+
+ aio_suspend()/aiowait()/aio_waitcomplete();
+
+ mask signal
+
+ if (ngx_socket_errno == NGX_EINTR)
+ look listen
+ select()/accept() nb listen sockets
+ else
+ aio
+}
+
+int ngx_posix_aio_process_events(ngx_log_t *log)
+{
+ unmask signal
+
+ /* BUG: signal can be delivered before select() */
+
+ select(listen);
+
+ mask signal
+
+ if (ngx_socket_errno == NGX_EINTR)
+ look ready array
+}
+
+void aio_sig_handler(int signo, siginfo_t *siginfo, void *context)
+{
+ push siginfo->si_value.sival_ptr
+}
+