changeset 349:a958aa92f9a5

nginx-0.0.4-2004-06-09-20:36:55 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 09 Jun 2004 16:36:55 +0000
parents 68ff8000a974
children 7b96b7f8a6af
files src/core/nginx.h src/event/modules/ngx_rtsig_module.c
diffstat 2 files changed, 35 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -2,7 +2,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VER          "nginx/0.0.3"
+#define NGINX_VER          "nginx/0.0.4"
 
 #define NGINX_VAR          "NGINX"
 #define NGX_NEWPID_EXT     ".newbin"
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -136,6 +136,17 @@ static ngx_int_t ngx_rtsig_add_connectio
     int                signo;
     ngx_rtsig_conf_t  *rtscf;
 
+    if (c->read->accept && c->read->disabled) {
+        if (fcntl(c->fd, F_SETOWN, ngx_pid) == -1) {
+            ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
+                          "fcntl(F_SETOWN) failed");
+            return NGX_ERROR;
+        }
+
+        c->read->active = 1;
+        c->read->disabled = 0;
+    }
+
     rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
 
     signo = rtscf->signo + c->read->instance;
@@ -181,12 +192,22 @@ static ngx_int_t ngx_rtsig_del_connectio
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
                    "rtsig del connection: fd:%d", c->fd);
 
-    if (!(flags & NGX_CLOSE_EVENT)) {
-        if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK) == -1) {
-            ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
-                          "fcntl(O_RDWR|O_NONBLOCK) failed");
-            return NGX_ERROR;
-        }
+    if ((flags & NGX_DISABLE_EVENT) && c->read->accept) {
+        c->read->active = 0;
+        c->read->disabled = 0;
+        return NGX_OK;
+    }
+
+    if (flags & NGX_CLOSE_EVENT) {
+        c->read->active = 0;
+        c->write->active = 0;
+        return NGX_OK;
+    }
+
+    if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK) == -1) {
+        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
+                      "fcntl(O_RDWR|O_NONBLOCK) failed");
+        return NGX_ERROR;
     }
 
     c->read->active = 0;
@@ -444,7 +465,11 @@ ngx_int_t ngx_rtsig_process_events(ngx_c
         ngx_event_process_posted(cycle);
     }
 
-    return NGX_OK;
+    if (signo == -1) {
+        return NGX_AGAIN;
+    } else {
+        return NGX_OK;
+    }
 }
 
 
@@ -531,9 +556,8 @@ static ngx_int_t ngx_rtsig_process_overf
              * is bigger then "/proc/sys/kernel/rtsig-max / 4"
              */
 
-            while (rtsig_max / 4 < rtsig_nr) {
-                ngx_rtsig_process_events(cycle);
-                rtsig_nr--;
+            if (rtsig_max / 4 < rtsig_nr) {
+                while (ngx_rtsig_process_events(cycle) == NGX_OK) { /* void */ }
             }
         }
     }