aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_connect.c1
-rw-r--r--src/event/ngx_event_proxy.c6
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_handler.c17
3 files changed, 20 insertions, 4 deletions
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 7018379de..72031d95a 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -161,6 +161,7 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc)
rev->data = wev->data = c;
c->read = rev;
c->write = wev;
+ wev->write = 1;
rev->instance = wev->instance = !instance;
diff --git a/src/event/ngx_event_proxy.c b/src/event/ngx_event_proxy.c
index ce22c6501..2255626a0 100644
--- a/src/event/ngx_event_proxy.c
+++ b/src/event/ngx_event_proxy.c
@@ -9,7 +9,7 @@
#if (NGX_EVENT_COPY_FILTER)
static int ngx_event_proxy_copy_input_filter(ngx_event_proxy_t *p,
- ngx_chain_t *chain);
+ ngx_chain_t *chain);
#endif
@@ -109,7 +109,7 @@ ngx_log_debug(p->log, "new hunk: %08X" _ chain->hunk);
ngx_log_debug(p->log, "file hunk: %08X" _ chain->hunk _
chain->hunk->end - chain->hunk->last);
- /* if the hunks is not needed to be saved in a cache and
+ /* if the hunks are not needed to be saved in a cache and
a downstream is ready then write the hunks to a downstream */
} else if (p->cachable == 0 && p->downstream->write->ready) {
@@ -709,7 +709,7 @@ ngx_log_debug(p->log, "event proxy file hunk: %08X:%08X" _ h _ h->shadow);
/* the copy input filter */
static int ngx_event_proxy_copy_input_filter(ngx_event_proxy_t *p,
- ngx_chain_t *chain)
+ ngx_chain_t *chain)
{
ngx_hunk_t *h;
ngx_chain_t *entry, *temp;
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c
index 2888e4cfa..9333c954c 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -779,12 +779,25 @@ static void ngx_http_proxy_process_upstream_body(ngx_event_t *rev)
ngx_log_debug(rev->log, "http proxy process upstream body");
if (rev->timedout) {
- ngx_http_proxy_next_upstream(p);
+ ngx_http_proxy_close_connection(p->upstream.connection);
+ p->upstream.connection = NULL;
return;
}
ngx_event_proxy_read_upstream(p->event_proxy);
+ if (p->event_proxy->upstream_eof) {
+ ngx_http_proxy_close_connection(p->upstream.connection);
+ p->upstream.connection = NULL;
+ return;
+ }
+
+ if (p->event_proxy->upstream_error) {
+ ngx_http_proxy_close_connection(p->upstream.connection);
+ p->upstream.connection = NULL;
+ return;
+ }
+
return;
}
@@ -1043,6 +1056,8 @@ static void ngx_http_proxy_close_connection(ngx_connection_t *c)
c->write->timer_set = 0;
}
+ /* TODO: move connection to the connection pool */
+
if (ngx_del_conn) {
ngx_del_conn(c);