diff src/http/ngx_http_upstream.c @ 5392:f1caf7b8ae1d

Upstream: subrequest_in_memory fix. With previous code only part of u->buffer might be emptied in case of special responses, resulting in partial responses seen by SSI set in case of simple protocols, or spurious errors like "upstream sent invalid chunked response" in case of complex ones.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 27 Sep 2013 16:50:26 +0400
parents 46bdbca10dfc
children 16b68c724438
line wrap: on
line diff
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -1711,10 +1711,6 @@ ngx_http_upstream_process_header(ngx_htt
 
     if (u->headers_in.status_n >= NGX_HTTP_SPECIAL_RESPONSE) {
 
-        if (r->subrequest_in_memory) {
-            u->buffer.last = u->buffer.pos;
-        }
-
         if (ngx_http_upstream_test_next(r, u) == NGX_OK) {
             return;
         }
@@ -3464,6 +3460,12 @@ ngx_http_upstream_finalize_request(ngx_h
 
 #endif
 
+    if (r->subrequest_in_memory
+        && u->headers_in.status_n >= NGX_HTTP_SPECIAL_RESPONSE)
+    {
+        u->buffer.last = u->buffer.pos;
+    }
+
     if (rc == NGX_DECLINED) {
         return;
     }