nginx-0.1.43-RELEASE import
*) Feature: the listen(2) backlog in the "listen" directive can be
changed using the -HUP signal.
*) Feature: the geo2nginx.pl script was added to contrib.
*) Change: the FastCGI parameters with the empty values now are passed
to a server.
*) Bugfix: the segmentation fault occurred or the worker process may
got caught in an endless loop if the proxied or FastCGI server sent
the "Cache-Control" header line and the "expires" directive was
used; in the proxied mode the the bug had appeared in 0.1.29.
diff --git a/src/core/nginx.c b/src/core/nginx.c
index d04d954..a59e4d6 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -288,9 +288,9 @@
s = ngx_atoi(v, p - v);
if (s == NGX_ERROR) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
- "invalid socket number \"%s\" in "
- NGINX_VAR " environment variable, "
- "ignoring the rest of the variable", v);
+ "invalid socket number \"%s\" in " NGINX_VAR
+ " environment variable, ignoring the rest"
+ " of the variable", v);
break;
}
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 8f0a365..d58f608 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_
-#define NGINX_VER "nginx/0.1.42"
+#define NGINX_VER "nginx/0.1.43"
#define NGINX_VAR "NGINX"
#define NGX_NEWPID_EXT ".newbin"
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index b873db2..fe75264 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -123,6 +123,8 @@
ntohs(sin->sin_port))
- ls[i].addr_text.data;
+ ls[i].backlog = -1;
+
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
ngx_memzero(&af, sizeof(struct accept_filter_arg));
@@ -467,7 +469,8 @@
return 0;
}
- if (err == NGX_ECONNRESET
+ if (err == 0
+ || err == NGX_ECONNRESET
#if !(NGX_WIN32)
|| err == NGX_EPIPE
#endif
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index 10a5cd5..6dd1919 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -45,6 +45,7 @@
unsigned bound:1; /* already bound */
unsigned inherited:1; /* inherited from previous process */
unsigned nonblocking_accept:1;
+ unsigned change_backlog:1;
unsigned nonblocking:1;
unsigned shared:1; /* shared between threads or processes */
unsigned addr_ntop:1;
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index b67223a..2c78235 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -339,6 +339,10 @@
nls[n].remain = 1;
ls[i].remain = 1;
+ if (ls[n].backlog != nls[i].backlog) {
+ nls[n].change_backlog = 1;
+ }
+
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
/*
@@ -405,12 +409,21 @@
failed = 1;
}
-#if (NGX_HAVE_DEFERRED_ACCEPT)
-
if (!failed) {
ls = cycle->listening.elts;
for (i = 0; i < cycle->listening.nelts; i++) {
+ if (ls[i].change_backlog) {
+ if (listen(ls[i].fd, ls[i].backlog) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
+ "changing the listen() backlog to %d "
+ "for %V failed, ignored",
+ &ls[i].addr_text, ls[i].backlog);
+ }
+ }
+
+#if (NGX_HAVE_DEFERRED_ACCEPT)
+
#ifdef SO_ACCEPTFILTER
if (ls[i].delete_deferred) {
if (setsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER,
@@ -476,9 +489,9 @@
ls[i].deferred_accept = 1;
}
#endif
+#endif
}
}
-#endif
}
}