]> git.kaiwu.me - nginx.git/commitdiff
Upstream: fixed handling of write event after sending request.
authorValentin Bartenev <vbart@nginx.com>
Tue, 1 Jul 2014 16:52:08 +0000 (20:52 +0400)
committerValentin Bartenev <vbart@nginx.com>
Tue, 1 Jul 2014 16:52:08 +0000 (20:52 +0400)
The ngx_http_upstream_dummy_handler() must be set regardless of
the read event state.  This prevents possible additional call of
ngx_http_upstream_send_request_handler().

src/http/ngx_http_upstream.c

index 42b8ba80eab3dc2a70b1ded63ff66676585d6467..20722ac3f44d9814520a5dba9a5ec208f558afe8 100644 (file)
@@ -1674,13 +1674,6 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u)
         c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
     }
 
-    ngx_add_timer(c->read, u->conf->read_timeout);
-
-    if (c->read->ready) {
-        ngx_http_upstream_process_header(r, u);
-        return;
-    }
-
     u->write_event_handler = ngx_http_upstream_dummy_handler;
 
     if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
@@ -1688,6 +1681,13 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u)
                                            NGX_HTTP_INTERNAL_SERVER_ERROR);
         return;
     }
+
+    ngx_add_timer(c->read, u->conf->read_timeout);
+
+    if (c->read->ready) {
+        ngx_http_upstream_process_header(r, u);
+        return;
+    }
 }