diff src/event/ngx_event.h @ 164:84036764e215

nginx-0.0.1-2003-10-29-11:30:44 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 29 Oct 2003 08:30:44 +0000
parents fb61ba77beba
children 389d7ee9fa60
line wrap: on
line diff
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -60,13 +60,19 @@ struct ngx_event_s {
     unsigned         instance:1;
 
     /*
-     * event was passed or would be passed to a kernel;
-     * the posted aio operation.
+     * the event was passed or would be passed to a kernel;
+     * aio mode: 1 - the posted aio operation,
+     *           0 - the complete aio operation or no aio operation.
      */
     unsigned         active:1;
 
-    /* ready event; the complete aio operation */
+    /*
+     * the ready event;
+     * in aio mode "ready" is always set - it makes things simple
+     * to learn whether the aio operation complete use aio_complete flag
+     */
     unsigned         ready:1;
+    unsigned         aio_complete:1;
 
     unsigned         eof:1;
     unsigned         error:1;
@@ -338,15 +344,8 @@ int ngx_event_post_acceptex(ngx_listenin
 
 
 
-ngx_inline static int ngx_handle_read_event(ngx_event_t *rev)
+ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int close)
 {
-    if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT)) {
-
-        /* aio, iocp, epoll */
-
-        return NGX_OK;
-    }
-
     if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
 
         /* kqueue */
@@ -359,26 +358,31 @@ ngx_inline static int ngx_handle_read_ev
         }
 
         return NGX_OK;
-    }
 
-    /* select, poll, /dev/poll */
+    } else if (ngx_event_flags & NGX_USE_LEVEL_EVENT) {
+
+        /* select, poll, /dev/poll */
 
-    if (!rev->active && !rev->ready) {
-        if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) {
-            return NGX_ERROR;
+        if (!rev->active && !rev->ready) {
+            if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT)
+                                                                == NGX_ERROR) {
+                return NGX_ERROR;
+            }
+
+            return NGX_OK;
         }
 
-        return NGX_OK;
+        if (rev->active && (rev->ready || close)) {
+            if (ngx_del_event(rev, NGX_READ_EVENT, close ? NGX_CLOSE_EVENT : 0)
+                                                                == NGX_ERROR) {
+                return NGX_ERROR;
+            }
+
+            return NGX_OK;
+        }
     }
 
-    if (rev->active && (rev->ready || rev->eof)) {
-        if (ngx_del_event(rev, NGX_READ_EVENT, rev->eof ? NGX_CLOSE_EVENT : 0)
-                                                                == NGX_ERROR) {
-            return NGX_ERROR;
-        }
-
-        return NGX_OK;
-    }
+    /* aio, iocp, epoll, rt signals */
 
     return NGX_OK;
 }
@@ -411,13 +415,6 @@ ngx_inline static int ngx_handle_level_r
 
 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat)
 {
-    if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT)) {
-
-        /* aio, iocp, epoll */
-
-        return NGX_OK;
-    }
-
     if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
 
         /* kqueue */
@@ -437,25 +434,30 @@ ngx_inline static int ngx_handle_write_e
         }
 
         return NGX_OK;
-    }
 
-    /* select, poll, /dev/poll */
+    } else if (ngx_event_flags & NGX_USE_LEVEL_EVENT) {
+
+        /* select, poll, /dev/poll */
 
-    if (!wev->active && !wev->ready) {
-        if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) {
-            return NGX_ERROR;
+        if (!wev->active && !wev->ready) {
+            if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_LEVEL_EVENT)
+                                                                == NGX_ERROR) {
+                return NGX_ERROR;
+            }
+
+            return NGX_OK;
         }
 
-        return NGX_OK;
+        if (wev->active && wev->ready) {
+            if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) {
+                return NGX_ERROR;
+            }
+
+            return NGX_OK;
+        }
     }
 
-    if (wev->active && wev->ready) {
-        if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) {
-            return NGX_ERROR;
-        }
-
-        return NGX_OK;
-    }
+    /* aio, iocp, epoll, rt signals */
 
     return NGX_OK;
 }