]> git.kaiwu.me - nginx.git/commitdiff
Cache: fix for sending of empty responses.
authorMaxim Dounin <mdounin@mdounin.ru>
Tue, 27 Sep 2011 11:15:35 +0000 (11:15 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Tue, 27 Sep 2011 11:15:35 +0000 (11:15 +0000)
Revert wrong fix for empty responses introduced in 0.8.31 and apply new one,
rewritten to match things done by static module as close as possible.

src/http/ngx_http_file_cache.c

index d87f785405b2aa8ffdb9c93b177fcf01887b635a..f212d6c6cb4ef8f8a309e0840dc7082f467eb17a 100644 (file)
@@ -853,6 +853,10 @@ ngx_http_cache_send(ngx_http_request_t *r)
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                    "http file cache send: %s", c->file.name.data);
 
+    if (r != r->main && c->length - c->body_start == 0) {
+        return ngx_http_send_header(r);
+    }
+
     /* we need to allocate all before the header would be sent */
 
     b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
@@ -865,8 +869,6 @@ ngx_http_cache_send(ngx_http_request_t *r)
         return NGX_HTTP_INTERNAL_SERVER_ERROR;
     }
 
-    r->header_only = (c->length - c->body_start) == 0;
-
     rc = ngx_http_send_header(r);
 
     if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
@@ -876,7 +878,7 @@ ngx_http_cache_send(ngx_http_request_t *r)
     b->file_pos = c->body_start;
     b->file_last = c->length;
 
-    b->in_file = 1;
+    b->in_file = (c->length - c->body_start) ? 1: 0;
     b->last_buf = (r == r->main) ? 1: 0;
     b->last_in_chain = 1;