changeset 627:387450de0b4d release-0.3.35

nginx-0.3.35-RELEASE import *) Bugfix: the accept-filter and the TCP_DEFER_ACCEPT option were set for first "listen" directive only; the bug had appeared in 0.3.31. *) Bugfix: in the "proxy_pass" directive without the URI part in a subrequest.
author Igor Sysoev <igor@sysoev.ru>
date Tue, 28 Mar 2006 12:24:47 +0000
parents 517493c33072
children b338276e1aab
files docs/xml/nginx/changes.xml 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 6 files changed, 53 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/docs/xml/nginx/changes.xml
+++ b/docs/xml/nginx/changes.xml
@@ -9,6 +9,33 @@
 <title lang="en">nginx changelog</title>
 
 
+<changes ver="0.3.35" date="22.03.2006">
+
+<change type="bugfix">
+<para lang="ru">
+accept-фильтр и TCP_DEFER_ACCEPT устанавливались только для первой
+директивы listen;
+ошибка появилась в 0.3.31.
+</para>
+<para lang="en">
+the accept-filter and the TCP_DEFER_ACCEPT option were set for first "listen"
+directive only;
+bug appeared in 0.3.31.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в директиве proxy_pass без URI при использовании в подзапросе.
+</para>
+<para lang="en">
+in the "proxy_pass" directive without the URI part in a subrequest.
+</para>
+</change>
+
+</changes>
+
+
 <changes ver="0.3.34" date="21.03.2006">
 
 <change type="feature">
--- 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;