aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/proxy/ngx_http_proxy_upstream.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-12-02 18:40:46 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-12-02 18:40:46 +0000
commit42b12b34fa74c15cfb1746d71cde949f3d5807ef (patch)
treec44cd3f35d794e6e2be01d516e72737464f76fff /src/http/modules/proxy/ngx_http_proxy_upstream.c
parent4e7b11b02bd42ed284a5f006a13b0635fc33d556 (diff)
downloadnginx-42b12b34fa74c15cfb1746d71cde949f3d5807ef.tar.gz
nginx-42b12b34fa74c15cfb1746d71cde949f3d5807ef.zip
nginx-0.1.11-RELEASE importrelease-0.1.11
*) Feature: the worker_priority directive. *) Change: both tcp_nopush and tcp_nodelay directives affect the transferred response. *) Bugfix: nginx did not call initgroups(). Thanks to Andrew Sitnikov and Andrei Nigmatulin. *) Change: now the ngx_http_autoindex_module shows the file size in the bytes. *) Bugfix: the ngx_http_autoindex_module returned the 500 error if the broken symlink was in a directory. *) Bugfix: the files bigger than 4G could not be transferred using sendfile. *) Bugfix: if the backend was resolved to several backends and there was an error while the response waiting then process may got caught in an endless loop. *) Bugfix: the worker process may exit with the "unknown cycle" message when the /dev/poll method was used. *) Bugfix: "close() channel failed" errors. *) Bugfix: the autodetection of the "nobody" and "nogroup" groups. *) Bugfix: the send_lowat directive did not work on Linux. *) Bugfix: the segmentation fault occurred if there was no events section in configuration. *) Bugfix: nginx could not be built on OpenBSD. *) Bugfix: the double slashes in "://" in the URI were converted to ":/".
Diffstat (limited to 'src/http/modules/proxy/ngx_http_proxy_upstream.c')
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_upstream.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index 23d40c493..47d2b17df 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -528,6 +528,7 @@ static void ngx_http_proxy_reinit_upstream(ngx_http_proxy_ctx_t *p)
{
ngx_chain_t *cl;
ngx_output_chain_ctx_t *output;
+ ngx_http_proxy_state_e state;
/* reinit the request chain */
@@ -560,11 +561,17 @@ static void ngx_http_proxy_reinit_upstream(ngx_http_proxy_ctx_t *p)
/* add one more state */
+ state = p->state->cache_state;
+
if (!(p->state = ngx_push_array(&p->states))) {
ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
return;
}
+ ngx_memzero(p->state, sizeof(ngx_http_proxy_state_t));
+
+ p->state->cache_state = state;
+
p->status = 0;
p->status_count = 0;
}
@@ -719,9 +726,9 @@ static void ngx_http_proxy_connect(ngx_http_proxy_ctx_t *p)
writer->out = NULL;
writer->last = &writer->out;
writer->connection = c;
- writer->limit = OFF_T_MAX_VALUE;
+ writer->limit = 0;
- if (p->upstream->peer.tries > 1 && p->request_sent) {
+ if (p->request_sent) {
ngx_http_proxy_reinit_upstream(p);
}
@@ -803,13 +810,13 @@ static void ngx_http_proxy_send_request(ngx_http_proxy_ctx_t *p)
p->request_sent ? NULL:
p->request->request_body->bufs);
+ p->request_sent = 1;
+
if (rc == NGX_ERROR) {
ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_ERROR);
return;
}
- p->request_sent = 1;
-
if (c->write->timer_set) {
ngx_del_timer(c->write);
}