# HG changeset patch # User Igor Sysoev # Date 1065587647 0 # Node ID e32405df0e77aa18863fec155e23d9b06646c3d2 # Parent 54307053f185f14550c263a0ea0551d4a27f7841 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 --- 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_conn 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 --- 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" _ 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 /* 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 --- 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_upstr 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_connect c->write->timer_set = 0; } + /* TODO: move connection to the connection pool */ + if (ngx_del_conn) { ngx_del_conn(c);