]> git.kaiwu.me - nginx.git/commitdiff
nginx-0.1.43-RELEASE import release-0.1.43
authorIgor Sysoev <igor@sysoev.ru>
Tue, 30 Aug 2005 10:55:07 +0000 (10:55 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Tue, 30 Aug 2005 10:55:07 +0000 (10:55 +0000)
    *) 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.

19 files changed:
conf/fastcgi_params [new file with mode: 0644]
contrib/README [new file with mode: 0644]
contrib/geo2nginx.pl [new file with mode: 0644]
docs/xml/nginx/changes.xml
src/core/nginx.c
src/core/nginx.h
src/core/ngx_connection.c
src/core/ngx_connection.h
src/core/ngx_cycle.c
src/http/modules/ngx_http_fastcgi_module.c
src/http/modules/ngx_http_headers_filter_module.c
src/http/ngx_http_request.c
src/http/ngx_http_request.h
src/http/ngx_http_request_body.c
src/http/ngx_http_upstream.c
src/os/unix/ngx_freebsd_sendfile_chain.c
src/os/unix/ngx_recv.c
src/os/unix/ngx_send.c
src/os/unix/ngx_writev_chain.c

diff --git a/conf/fastcgi_params b/conf/fastcgi_params
new file mode 100644 (file)
index 0000000..748a06c
--- /dev/null
@@ -0,0 +1,23 @@
+
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;
diff --git a/contrib/README b/contrib/README
new file mode 100644 (file)
index 0000000..3a69095
--- /dev/null
@@ -0,0 +1,6 @@
+
+geo2nginx.pl   by Andrei Nigmatulin
+
+       The perl script to convert CSV geoip database (free download
+       at http://www.maxmind.com/app/geoip_country) to format, suitable
+       for use with ngx_http_geo_module.
diff --git a/contrib/geo2nginx.pl b/contrib/geo2nginx.pl
new file mode 100644 (file)
index 0000000..29243ec
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/perl -w\r
+\r
+# (c) Andrei Nigmatulin, 2005\r
+#\r
+# this script provided "as is", without any warranties. use it at your own risk.\r
+#\r
+# special thanx to Andrew Sitnikov for perl port\r
+#\r
+# this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country)\r
+# to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx)\r
+#\r
+# for example, line with ip range\r
+#\r
+#   "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation"\r
+#\r
+# will be converted to four subnetworks:\r
+#\r
+#   62.16.68.0/22 RU;\r
+#   62.16.72.0/21 RU;\r
+#   62.16.80.0/20 RU;\r
+#   62.16.96.0/19 RU;\r
+\r
+\r
+use warnings;\r
+use strict;\r
+\r
+while( <STDIN> ){\r
+       if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){\r
+               print_subnets($1, $2, $3);\r
+       }\r
+}\r
+\r
+sub  print_subnets {\r
+       my ($a1, $a2, $c) = @_;\r
+       my $l;\r
+    while ($a1 <= $a2) {\r
+               for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){};\r
+               print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n";\r
+       $a1 += (1 << $l);\r
+       }\r
+}\r
+\r
+sub long2ip {\r
+       my $ip = shift;\r
+\r
+       my $str = 0;\r
+\r
+       $str = ($ip & 255);\r
+\r
+       $ip >>= 8;\r
+       $str = ($ip & 255).".$str";\r
+\r
+       $ip >>= 8;\r
+       $str = ($ip & 255).".$str";\r
+\r
+       $ip >>= 8;\r
+       $str = ($ip & 255).".$str";\r
+}\r
index 9ba8ffa8d01c0af06bb96db5e4824db32ba3cf8f..b8430ef9df055d0926ef6e77674bedc449b1bbc2 100644 (file)
@@ -9,6 +9,71 @@
 <title lang="en">nginx changelog</title>
 
 
+<changes ver="0.1.43" date="30.08.2005">
+
+<change type="feature">
+<para lang="ru">
+listen(2) backlog × ÄÉÒÅËÔÉ×Å listen ÍÏÖÎÏ ÍÅÎÑÔØ ÐÏ ÓÉÇÎÁÌÕ -HUP.
+</para>
+<para lang="en">
+the listen(2) backlog in the "listen" directive
+can be changed using the -HUP signal.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+ÓËÒÉÐÔ geo2nginx.pl ÄÏÂÁ×ÌÅΠנcontrib.
+</para>
+<para lang="en">
+the geo2nginx.pl script was added to contrib.
+</para>
+</change>
+
+<change type="change">
+<para lang="ru">
+ÐÁÒÁÍÅÔÒÙ FastCGI, Ó ÐÕÓÔÙÍ ÚÎÁÞÅÎÉÑÍÉ, ÔÅÐÅÒØ ÐÅÒÅÄÁÀÔÓÑ ÓÅÒ×ÅÒÕ.
+</para>
+<para lang="en">
+the FastCGI parameters with the empty values now are passed to a server.
+</para>
+</change>
+
+<!--
+
+<change type="bugfix">
+<para lang="ru">
+ÐÒÉ ÏÛÉÂËÁÈ × ÒÁÂÏÔÅ Ó ÐÒÏËÓÉÒÏ×ÁÎÎÙÍ ÓÅÒ×ÅÒÏÍ ÉÌÉ FastCGI ÓÅÒ×ÅÒÏÍ
+ÍÏÇ ÐÒÏÉÚÏÊÔÉ segmentation fault;
+× ÒÅÖÉÍÅ ÐÒÏËÓÉ ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.1.29.
+</para>
+<para lang="en">
+the segmentation fault may occurred if there were errors while
+working with proxied or FastCGI server;
+in the proxied mode the bug appeared in 0.1.29.
+</para>
+</change>
+
+-->
+
+<change type="bugfix">
+<para lang="ru">
+ÅÓÌÉ × ÏÔ×ÅÔÅ ÐÒÏËÓÉÒÏ×ÁÎÎÏÇÏ ÓÅÒ×ÅÒÁ ÉÌÉ FastCGI ÓÅÒ×ÅÒÁ ÂÙÌÁ ÓÔÒÏËÁ
+"Cache-Control", ÔÏ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÄÉÒÅËÔÉ×Ù expires ÐÒÏÉÓÈÏÄÉÌ
+segmentation fault ÉÌÉ ÒÁÂÏÞÉÊ ÐÒÏÃÅÓÓ ÍÏÇ ÚÁÃÉËÌÉÔÓÑ;
+× ÒÅÖÉÍÅ ÐÒÏËÓÉ ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.1.29.
+</para>
+<para lang="en">
+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 bug appeared in 0.1.29.
+</para>
+</change>
+
+</changes>
+
+
 <changes ver="0.1.42" date="23.08.2005">
 
 <change type="bugfix">
index d04d95499692fce653797039817aa393db46ef26..a59e4d6f3eff10578e4ca61bbeb9f4938b22e41f 100644 (file)
@@ -288,9 +288,9 @@ ngx_add_inherited_sockets(ngx_cycle_t *cycle)
             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;
             }
 
index 8f0a3651386185b3d826254f3b40442c7495c689..d58f6086de32883aca2ac0cedfab9843ec51d7e7 100644 (file)
@@ -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"
index b873db2e8e6bf810721df1a950c55b7afca7359d..fe75264dbe849f7fc8731ede04f8941425d575f2 100644 (file)
@@ -123,6 +123,8 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
                                           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 @@ ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
         return 0;
     }
 
-    if (err == NGX_ECONNRESET
+    if (err == 0
+        || err == NGX_ECONNRESET
 #if !(NGX_WIN32)
         || err == NGX_EPIPE
 #endif
index 10a5cd587f622b9be8b79bcdbe755a492ff360e6..6dd1919387c9a7b20c8295a9d6a21dbda01a510c 100644 (file)
@@ -45,6 +45,7 @@ typedef struct {
     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;
index b67223a692df2eb9b97ac6429992e90d43025ac3..2c7823557aaf9359f020c194a86db889c756f45c 100644 (file)
@@ -339,6 +339,10 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
                         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 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
                 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,
@@ -475,10 +488,10 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
                     if (ls[i].add_deferred) {
                         ls[i].deferred_accept = 1;
                     }
+#endif
 #endif
                 }
             }
-#endif
         }
     }
 
index 480a2289566f95267affb468b083e9655b9cc4f0..c5a2c4bc4005ef9c3c06779f631f1ee986cd1c1e 100644 (file)
@@ -144,15 +144,6 @@ static ngx_http_fastcgi_request_start_t  ngx_http_fastcgi_request_start = {
 };
 
 
-#if 0
-static ngx_str_t ngx_http_fastcgi_methods[] = {
-    ngx_string("GET"),
-    ngx_string("HEAD"),
-    ngx_string("POST")
-};
-#endif
-
-
 static ngx_str_t  ngx_http_fastcgi_script_name =
     ngx_string("fastcgi_script_name");
 
@@ -428,9 +419,7 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
             }
             le.ip += sizeof(uintptr_t);
 
-            if (val_len) {
-                len += 1 + key_len + ((val_len > 127) ? 4 : 1) + val_len;
-            }
+            len += 1 + key_len + ((val_len > 127) ? 4 : 1) + val_len;
         }
     }
 
@@ -527,22 +516,18 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
             }
             le.ip += sizeof(uintptr_t);
 
-            if (val_len) {
-                *e.pos++ = (u_char) key_len;
+            *e.pos++ = (u_char) key_len;
 
-                if (val_len > 127) {
-                    *e.pos++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
-                    *e.pos++ = (u_char) ((val_len >> 16) & 0xff);
-                    *e.pos++ = (u_char) ((val_len >> 8) & 0xff);
-                    *e.pos++ = (u_char) (val_len & 0xff);
+            if (val_len > 127) {
+                *e.pos++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
+                *e.pos++ = (u_char) ((val_len >> 16) & 0xff);
+                *e.pos++ = (u_char) ((val_len >> 8) & 0xff);
+                *e.pos++ = (u_char) (val_len & 0xff);
 
-                } else {
-                    *e.pos++ = (u_char) val_len;
-                }
+            } else {
+                *e.pos++ = (u_char) val_len;
             }
 
-            e.skip = val_len ? 0 : 1;
-
             while (*(uintptr_t *) e.ip) {
                 code = *(ngx_http_script_code_pt *) e.ip;
                 code((ngx_http_script_engine_t *) &e);
index f27ab476d14525549aff8d3f3be564cf10049a54..91bebdc50dba8376ebf9f8a719d01ef7e7ce588b 100644 (file)
@@ -73,7 +73,7 @@ ngx_http_headers_filter(ngx_http_request_t *r)
 {
     size_t                    len;
     ngx_uint_t                i;
-    ngx_table_elt_t          *expires, *cc;
+    ngx_table_elt_t          *expires, *cc, **ccp;
     ngx_http_headers_conf_t  *conf;
 
     if (r->headers_out.status != NGX_HTTP_OK || r->main) {
@@ -103,9 +103,20 @@ ngx_http_headers_filter(ngx_http_request_t *r)
         len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT");
         expires->value.len = len - 1;
 
-        cc = r->headers_out.cache_control.elts;
+        ccp = r->headers_out.cache_control.elts;
 
-        if (cc == NULL) {
+        if (ccp == NULL) {
+
+            if (ngx_array_init(&r->headers_out.cache_control, r->pool,
+                               1, sizeof(ngx_table_elt_t *)) != NGX_OK)
+            {
+                return NGX_ERROR;
+            }
+
+            ccp = ngx_array_push(&r->headers_out.cache_control);
+            if (ccp == NULL) {
+                return NGX_ERROR;
+            }
 
             cc = ngx_list_push(&r->headers_out.headers);
             if (cc == NULL) {
@@ -116,10 +127,14 @@ ngx_http_headers_filter(ngx_http_request_t *r)
             cc->key.len = sizeof("Cache-Control") - 1;
             cc->key.data = (u_char *) "Cache-Control";
 
+            *ccp = cc;
+
         } else {
             for (i = 1; i < r->headers_out.cache_control.nelts; i++) {
-                cc[i].hash = 0;
+                ccp[i]->hash = 0;
             }
+
+            cc = ccp[0];
         }
 
         if (conf->expires == NGX_HTTP_EXPIRES_EPOCH) {
index c6a5809484d689c3355a4f913af5e45f37e1b416..b8e97d2a7d952b3a9e09a9cc1c4cf7d1569f9c6a 100644 (file)
@@ -637,8 +637,24 @@ ngx_http_process_request_line(ngx_event_t *rev)
                            "http exten: \"%V\"", &r->exten);
 
             if (r->http_version < NGX_HTTP_VERSION_10) {
+
+                if (rev->timer_set) {
+                    ngx_del_timer(rev);
+                }
+
+#if (NGX_STAT_STUB)
+                ngx_atomic_dec(ngx_stat_reading);
+                r->stat_reading = 0;
+                ngx_atomic_inc(ngx_stat_writing);
+                r->stat_writing = 1;
+#endif
+
+                rev->handler = ngx_http_request_handler;
+                c->write->handler = ngx_http_request_handler;
                 r->read_event_handler = ngx_http_block_read;
+
                 ngx_http_handler(r);
+
                 return;
             }
 
@@ -868,6 +884,7 @@ ngx_http_process_request_headers(ngx_event_t *rev)
             r->read_event_handler = ngx_http_block_read;
 
             ngx_http_handler(r);
+
             return;
         }
 
@@ -1783,6 +1800,8 @@ ngx_http_discard_body(ngx_http_request_t *r)
         return NGX_OK;
     }
 
+    r->discard_body = 1;
+
     size = r->header_in->last - r->header_in->pos;
 
     if (size) {
index 2e80991028d829c78ade689856cc6e9e058958e4..fe56b26f5faabab60ec2b219dee7fddeb99cb7f8 100644 (file)
@@ -362,6 +362,7 @@ struct ngx_http_request_s {
     unsigned                          header_only:1;
     unsigned                          keepalive:1;
     unsigned                          lingering_close:1;
+    unsigned                          discard_body:1;
     unsigned                          internal:1;
     unsigned                          done:1;
     unsigned                          utf8:1;
index eb2e6a570e2b29c885abd2da98bc4bb3b5fbc5ec..66c7c6722002f9ef44aa02c07287fa2745df1a7d 100644 (file)
@@ -31,7 +31,7 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
     ngx_http_request_body_t   *rb;
     ngx_http_core_loc_conf_t  *clcf;
 
-    if (r->request_body) {
+    if (r->request_body || r->discard_body) {
         post_handler(r);
         return NGX_OK;
     }
index f59ff179e2eac74dd83f99563c4c11444009f1ab..c575347db54889bc2e2e60e74cf66c9ac1fcb777 100644 (file)
@@ -241,7 +241,9 @@ ngx_http_upstream_init(ngx_http_request_t *r)
 
     u = r->upstream;
 
-    u->request_bufs = r->request_body->bufs;
+    if (r->request_body) {
+        u->request_bufs = r->request_body->bufs;
+    }
 
     if (u->conf->method == NGX_CONF_UNSET_UINT) {
         u->method = r->method;
@@ -250,7 +252,7 @@ ngx_http_upstream_init(ngx_http_request_t *r)
         u->method = u->conf->method;
     }
 
-    if (u->create_request(r) == NGX_ERROR) {
+    if (u->create_request(r) != NGX_OK) {
         ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
         return;
     }
@@ -615,9 +617,8 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u)
         && !u->request_sent
         && c->write->pending_eof)
     {
-        ngx_log_error(NGX_LOG_ERR, c->log, c->write->kq_errno,
-                      "connect() failed");
-
+        (void) ngx_connection_error(c, c->write->kq_errno,
+                                    "kevent() reported that connect() failed");
         ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
         return;
     }
@@ -716,12 +717,6 @@ ngx_http_upstream_send_request_handler(ngx_event_t *wev)
         return;
     }
 
-    if (r->connection->write->eof && (!u->cachable || !u->request_sent)) {
-        ngx_http_upstream_finalize_request(r, u,
-                                           NGX_HTTP_INTERNAL_SERVER_ERROR);
-        return;
-    }
-
     ngx_http_upstream_send_request(r, u);
 }
 
@@ -1788,6 +1783,7 @@ static u_char *
 ngx_http_upstream_log_error(ngx_http_request_t *r, u_char *buf, size_t len)
 {
     u_char                 *p;
+    ngx_str_t               line;
     uintptr_t               escape;
     ngx_http_upstream_t    *u;
     ngx_peer_connection_t  *peer;
@@ -1824,33 +1820,35 @@ ngx_http_upstream_log_error(ngx_http_request_t *r, u_char *buf, size_t len)
             buf += r->uri.len - u->conf->location->len + escape;
             len -= r->uri.len - u->conf->location->len + escape;
 
-            if (r->args.len) {
-                p = ngx_snprintf(buf, len, "?%V", &r->args);
-                len -= p - buf;
-                buf = p;
+        } else {
+            p = ngx_palloc(r->pool,
+                           r->uri.len - u->conf->location->len + escape);
+            if (p == NULL) {
+                return buf;
             }
 
-            return ngx_http_log_error_info(r, buf, len);
-        }
+            ngx_escape_uri(p, r->uri.data + u->conf->location->len,
+                           r->uri.len - u->conf->location->len, NGX_ESCAPE_URI);
 
-        p = ngx_palloc(r->pool, r->uri.len - u->conf->location->len + escape);
-        if (p == NULL) {
-            return buf;
+            line.len = len;
+            line.data = p;
+
+            return ngx_snprintf(buf, len, "%V", &line);
         }
 
-        ngx_escape_uri(p, r->uri.data + u->conf->location->len,
-                       r->uri.len - u->conf->location->len, NGX_ESCAPE_URI);
+    } else {
+        line.len = r->uri.len - u->conf->location->len;
+        if (line.len > len) {
+            line.len = len;
+        }
 
-        p = ngx_cpymem(buf, p, r->uri.len - u->conf->location->len + escape);
+        line.data = r->uri.data + u->conf->location->len;
+        p = ngx_snprintf(buf, len, "%V", &line);
 
-    } else {
-        p = ngx_cpymem(buf, r->uri.data + u->conf->location->len,
-                       r->uri.len - u->conf->location->len);
+        len -= p - buf;
+        buf = p;
     }
 
-    len -= p - buf;
-    buf = p;
-
     if (r->args.len) {
         p = ngx_snprintf(buf, len, "?%V", &r->args);
         len -= p - buf;
index a29aaf3c99adf78fe05cb49b874d979b684dd45c..7ae5948970e07fecb8b1880f03db36d2803443c7 100644 (file)
@@ -57,9 +57,8 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 #if (NGX_HAVE_KQUEUE)
 
     if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) {
-        ngx_log_error(NGX_LOG_INFO, c->log, wev->kq_errno,
-                      "kevent() reported about an closed connection");
-
+        (void) ngx_connection_error(c, wev->kq_errno,
+                               "kevent() reported about an closed connection");
         wev->error = 1;
         return NGX_CHAIN_ERROR;
     }
@@ -228,8 +227,8 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
                     if (err != NGX_EINTR) {
                         wev->error = 1;
-                        ngx_connection_error(c, err,
-                                             ngx_tcp_nopush_n " failed");
+                        (void) ngx_connection_error(c, err,
+                                                    ngx_tcp_nopush_n " failed");
                         return NGX_CHAIN_ERROR;
                     }
 
@@ -276,7 +275,7 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
                 } else {
                     wev->error = 1;
-                    ngx_connection_error(c, err, "sendfile() failed");
+                    (void) ngx_connection_error(c, err, "sendfile() failed");
                     return NGX_CHAIN_ERROR;
                 }
             }
index 369be661aaa0a4d97364ac26d6afbf2e99b859bb..e96ca789860d472db9816edd7e1b10fc07104000 100644 (file)
@@ -29,20 +29,12 @@ ssize_t ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size)
                 rev->ready = 0;
                 rev->eof = 1;
 
-                ngx_log_error(NGX_LOG_INFO, c->log, rev->kq_errno,
-                              "kevent() reported about an closed connection");
-
                 if (rev->kq_errno) {
                     rev->error = 1;
                     ngx_set_socket_errno(rev->kq_errno);
 
-                    if (rev->kq_errno == NGX_ECONNRESET
-                        && c->log_error == NGX_ERROR_IGNORE_ECONNRESET)
-                    {
-                        return 0;
-                    }
-
-                    return NGX_ERROR;
+                    return ngx_connection_error(c, rev->kq_errno,
+                               "kevent() reported about an closed connection");
                 }
 
                 return 0;
index ffe6bcba2e9068b9e583127be54b7331340ccc0d..167f2eca33ff353acf3a2f6294785df7ab7c8846 100644 (file)
@@ -20,9 +20,8 @@ ssize_t ngx_unix_send(ngx_connection_t *c, u_char *buf, size_t size)
 #if (NGX_HAVE_KQUEUE)
 
     if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) {
-        ngx_log_error(NGX_LOG_INFO, c->log, wev->kq_errno,
-                      "kevent() reported about an closed connection");
-
+        (void) ngx_connection_error(c, wev->kq_errno,
+                               "kevent() reported about an closed connection");
         wev->error = 1;
         return NGX_ERROR;
     }
@@ -63,7 +62,7 @@ ssize_t ngx_unix_send(ngx_connection_t *c, u_char *buf, size_t size)
 
         } else {
             wev->error = 1;
-            ngx_connection_error(c, err, "send() failed");
+            (void) ngx_connection_error(c, err, "send() failed");
             return NGX_ERROR;
         }
     }
index ed3ad7158d5041cec30891b7f9007d4e35064a1a..6d516ac696784ac5b57771c8b2470c95eaa5d93e 100644 (file)
@@ -34,9 +34,8 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 #if (NGX_HAVE_KQUEUE)
 
     if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) {
-        ngx_log_error(NGX_LOG_INFO, c->log, wev->kq_errno,
-                      "kevent() reported about an closed connection");
-
+        (void) ngx_connection_error(c, wev->kq_errno,
+                               "kevent() reported about an closed connection");
         wev->error = 1;
         return NGX_CHAIN_ERROR;
     }
@@ -117,7 +116,7 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
             } else {
                 wev->error = 1;
-                ngx_connection_error(c, err, "writev() failed");
+                (void) ngx_connection_error(c, err, "writev() failed");
                 return NGX_CHAIN_ERROR;
             }
         }