changeset 176:fae16d0c5bf4 NGINX_0_3_35

nginx 0.3.35 *) Bugfix: the accept-filter and the TCP_DEFER_ACCEPT option were set for first "listen" directive only; bug appeared in 0.3.31. *) Bugfix: in the "proxy_pass" directive without the URI part in a subrequest.
author Igor Sysoev <http://sysoev.ru>
date Wed, 22 Mar 2006 00:00:00 +0300
parents 8ea1b77a7700
children 4a3ddd758222
files CHANGES CHANGES.ru src/core/nginx.h src/core/ngx_connection.c src/http/modules/ngx_http_proxy_module.c src/os/unix/ngx_readv_chain.c src/os/unix/ngx_recv.c
diffstat 7 files changed, 44 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,12 @@
+
+Changes with nginx 0.3.35                                        22 Mar 2006
+
+    *) Bugfix: the accept-filter and the TCP_DEFER_ACCEPT option were set 
+       for first "listen" directive only; bug appeared in 0.3.31.
+
+    *) Bugfix: in the "proxy_pass" directive without the URI part in a 
+       subrequest.
+
 
 Changes with nginx 0.3.34                                        21 Mar 2006
 
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,3 +1,12 @@
+
+Изменения в nginx 0.3.35                                          22.03.2006
+
+    *) Исправление: accept-фильтр и TCP_DEFER_ACCEPT устанавливались только 
+       для первой директивы listen; ошибка появилась в 0.3.31.
+
+    *) Исправление: в директиве proxy_pass без URI при использовании в 
+       подзапросе.
+
 
 Изменения в nginx 0.3.34                                          21.03.2006
 
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VER          "nginx/0.3.34"
+#define NGINX_VER          "nginx/0.3.35"
 
 #define NGINX_VAR          "NGINX"
 #define NGX_OLDPID_EXT     ".oldbin"
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -404,74 +404,75 @@ ngx_configure_listening_socket(ngx_cycle
 
 #ifdef SO_ACCEPTFILTER
 
-        if (ls->delete_deferred) {
-            if (setsockopt(ls->fd, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0) == -1)
+        if (ls[i].delete_deferred) {
+            if (setsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)
+                == -1)
             {
                 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                               "setsockopt(SO_ACCEPTFILTER, NULL) "
                               "for %V failed, ignored",
-                              &ls->addr_text);
+                              &ls[i].addr_text);
 
-                if (ls->accept_filter) {
+                if (ls[i].accept_filter) {
                     ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
                                   "could not change the accept filter "
                                   "to \"%s\" for %V, ignored",
-                                  ls->accept_filter, &ls->addr_text);
+                                  ls[i].accept_filter, &ls[i].addr_text);
                 }
 
                 continue;
             }
 
-            ls->deferred_accept = 0;
+            ls[i].deferred_accept = 0;
         }
 
-        if (ls->add_deferred) {
+        if (ls[i].add_deferred) {
             ngx_memzero(&af, sizeof(struct accept_filter_arg));
             (void) ngx_cpystrn((u_char *) af.af_name,
-                               (u_char *) ls->accept_filter, 16);
+                               (u_char *) ls[i].accept_filter, 16);
 
-            if (setsockopt(ls->fd, SOL_SOCKET, SO_ACCEPTFILTER,
+            if (setsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER,
                            &af, sizeof(struct accept_filter_arg))
                 == -1)
             {
                 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                               "setsockopt(SO_ACCEPTFILTER, \"%s\") "
                               " for %V failed, ignored",
-                              ls->accept_filter, &ls->addr_text);
+                              ls[i].accept_filter, &ls[i].addr_text);
                 continue;
             }
 
-            ls->deferred_accept = 1;
+            ls[i].deferred_accept = 1;
         }
 
 #endif
 
 #ifdef TCP_DEFER_ACCEPT
 
-        if (ls->add_deferred || ls->delete_deferred) {
+        if (ls[i].add_deferred || ls[i].delete_deferred) {
 
-            if (ls->add_deferred) {
-                timeout = (int) (ls->post_accept_timeout / 1000);
+            if (ls[i].add_deferred) {
+                timeout = (int) (ls[i].post_accept_timeout / 1000);
 
             } else {
                 timeout = 0;
             }
 
-            if (setsockopt(ls->fd, IPPROTO_TCP, TCP_DEFER_ACCEPT,
+            if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_DEFER_ACCEPT,
                            &timeout, sizeof(int))
                 == -1)
             {
                 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                               "setsockopt(TCP_DEFER_ACCEPT, %d) for %V failed, "
                               "ignored",
-                              timeout, &ls->addr_text);
+                              timeout, &ls[i].addr_text);
 
                 continue;
             }
         }
 
-        if (ls->add_deferred) {
-            ls->deferred_accept = 1;
+        if (ls[i].add_deferred) {
+            ls[i].deferred_accept = 1;
         }
 
 #endif
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -487,7 +487,8 @@ ngx_http_proxy_create_request(ngx_http_r
 
     escape = 0;
 
-    loc_len = r->valid_location ? u->conf->location.len : 0;
+    loc_len = (r->valid_location && u->conf->uri.len) ? u->conf->location.len:
+                                                        0;
 
     if (u->conf->uri.len == 0 && r->valid_unparsed_uri && r == r->main) {
         unparsed_uri = 1;
--- a/src/os/unix/ngx_readv_chain.c
+++ b/src/os/unix/ngx_readv_chain.c
@@ -118,9 +118,11 @@ ngx_readv_chain(ngx_connection_t *c, ngx
                      * even if kqueue reported about available data
                      */
 
+#if 0
                     ngx_log_error(NGX_LOG_ALERT, c->log, 0,
                                   "readv() returned 0 while kevent() reported "
                                   "%d available bytes", rev->available);
+#endif
 
                     rev->eof = 1;
                     rev->available = 0;
--- a/src/os/unix/ngx_recv.c
+++ b/src/os/unix/ngx_recv.c
@@ -77,9 +77,11 @@ ssize_t ngx_unix_recv(ngx_connection_t *
                      * even if kqueue reported about available data
                      */
 
+#if 0
                     ngx_log_error(NGX_LOG_ALERT, c->log, 0,
                                   "recv() returned 0 while kevent() reported "
                                   "%d available bytes", rev->available);
+#endif
 
                     rev->eof = 1;
                     rev->available = 0;