nginx-0.0.1-2003-10-08-08:34:07 import
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c index 7018379..72031d9 100644 --- a/src/event/ngx_event_connect.c +++ b/src/event/ngx_event_connect.c
@@ -161,6 +161,7 @@ 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 ce22c65..2255626 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, "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 @@ /* 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 2888e4c..9333c95 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 @@ 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 @@ c->write->timer_set = 0; } + /* TODO: move connection to the connection pool */ + if (ngx_del_conn) { ngx_del_conn(c);