aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2011-09-27 11:17:11 +0000
committerMaxim Dounin <mdounin@mdounin.ru>2011-09-27 11:17:11 +0000
commitb16918ed08b9f1155220a980ee6e133d31f2b61a (patch)
tree68922be674b3471e63e960bd7ff4a9995ce9f61d /src
parent84c58a30e63fca6a509127fe046bd00a4b290135 (diff)
downloadnginx-b16918ed08b9f1155220a980ee6e133d31f2b61a.tar.gz
nginx-b16918ed08b9f1155220a980ee6e133d31f2b61a.zip
Cache: fix for sending of stale responses.
For normal cached responses ngx_http_cache_send() sends last buffer and then request finalized via ngx_http_finalize_request() call, i.e. everything is ok. But for stale responses (i.e. when upstream died, but we have something in cache) the same ngx_http_cache_send() sends last buffer, but then in ngx_http_upstream_finalize_request() another last buffer is send. This causes duplicate final chunk to appear if chunked encoding is used (and resulting problems with keepalive connections and so on). Fix this by not sending in ngx_http_upstream_finalize_request() another last buffer if we know response was from cache.
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_upstream.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 3d022c78f..703b8ff98 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -3072,7 +3072,12 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
r->connection->log->action = "sending to client";
- if (rc == 0) {
+ if (rc == 0
+#if (NGX_HTTP_CACHE)
+ && !r->cached
+#endif
+ )
+ {
rc = ngx_http_send_special(r, NGX_HTTP_LAST);
}