aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-04-27 11:20:55 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-04-27 11:20:55 +0000
commitdf585ef949c801d15a915c380583a60f032754b5 (patch)
tree9c90679ec1f2960d1f27983ed2e26105ff4b0a59 /src
parentf1cc457d7f562a7c8e7ff9ba28fc143bd175a7dc (diff)
downloadnginx-df585ef949c801d15a915c380583a60f032754b5.tar.gz
nginx-df585ef949c801d15a915c380583a60f032754b5.zip
get a full response if the response is cacheable or storable even
a client has closed connection prematurely
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_upstream.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 369c7bb28..2a49270eb 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -353,7 +353,9 @@ ngx_http_upstream_init(ngx_http_request_t *r)
u = r->upstream;
- if (!r->post_action && !u->conf->ignore_client_abort) {
+ u->store = (u->conf->store || u->conf->store_lengths);
+
+ if (!u->store && !r->post_action && !u->conf->ignore_client_abort) {
r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
}
@@ -439,8 +441,6 @@ ngx_http_upstream_init(ngx_http_request_t *r)
cln->data = r;
u->cleanup = &cln->handler;
- u->store = (u->conf->store || u->conf->store_lengths);
-
if (u->resolved == NULL) {
uscf = u->conf->upstream;
@@ -779,8 +779,10 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
u = r->upstream;
if (c->error) {
- ngx_http_upstream_finalize_request(r, u,
- NGX_HTTP_CLIENT_CLOSED_REQUEST);
+ if (!u->cacheable) {
+ ngx_http_upstream_finalize_request(r, u,
+ NGX_HTTP_CLIENT_CLOSED_REQUEST);
+ }
return;
}
@@ -803,7 +805,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
ev->error = 1;
}
- if (!u->cacheable && !u->store && u->peer.connection) {
+ if (!u->cacheable && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno,
"kevent() reported that client closed prematurely "
"connection, so upstream connection is closed too");
@@ -869,7 +871,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
ev->eof = 1;
c->error = 1;
- if (!u->cacheable && !u->store && u->peer.connection) {
+ if (!u->cacheable && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, err,
"client closed prematurely connection, "
"so upstream connection is closed too");
@@ -2486,7 +2488,7 @@ ngx_http_upstream_process_request(ngx_http_request_t *r)
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http upstream downstream error");
- if (!u->cacheable && u->peer.connection) {
+ if (!u->cacheable && !u->store && u->peer.connection) {
ngx_http_upstream_finalize_request(r, u, 0);
}
}