]> git.kaiwu.me - nginx.git/commitdiff
fix a broken cached response if bypass/no_cache directive values are different,
authorIgor Sysoev <igor@sysoev.ru>
Fri, 13 May 2011 10:05:38 +0000 (10:05 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Fri, 13 May 2011 10:05:38 +0000 (10:05 +0000)
the bug has been introduced in r3700

src/http/ngx_http_file_cache.c
src/http/ngx_http_upstream.c

index fb1ab98548ab044f9a07a5d6bbd5e78e665cf67c..03cd268b2cdc1e8e8998011e7e0dbc71c5c05b4a 100644 (file)
@@ -174,8 +174,6 @@ ngx_http_file_cache_create(ngx_http_request_t *r)
     ngx_pool_cleanup_t     *cln;
     ngx_http_file_cache_t  *cache;
 
-    ngx_http_file_cache_create_key(r);
-
     c = r->cache;
     cache = c->file_cache;
 
@@ -906,7 +904,7 @@ ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf)
     ngx_http_file_cache_t       *cache;
     ngx_http_file_cache_node_t  *fcn;
 
-    if (c->updated) {
+    if (c->updated || c->node == NULL) {
         return;
     }
 
index 914d72c84cf7b68459e55cddb8bcb0406663f2e1..8f1ee42c33c939d0f782829c2c3d0e0fc08e01db 100644 (file)
@@ -641,19 +641,6 @@ ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
 
     if (c == NULL) {
 
-        switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
-
-        case NGX_ERROR:
-            return NGX_ERROR;
-
-        case NGX_DECLINED:
-            u->cache_status = NGX_HTTP_CACHE_BYPASS;
-            return NGX_DECLINED;
-
-        default: /* NGX_OK */
-            break;
-        }
-
         if (!(r->method & u->conf->cache_methods)) {
             return NGX_DECLINED;
         }
@@ -674,6 +661,19 @@ ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
 
         ngx_http_file_cache_create_key(r);
 
+        switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
+
+        case NGX_ERROR:
+            return NGX_ERROR;
+
+        case NGX_DECLINED:
+            u->cache_status = NGX_HTTP_CACHE_BYPASS;
+            return NGX_DECLINED;
+
+        default: /* NGX_OK */
+            break;
+        }
+
         u->cacheable = 1;
 
         c = r->cache;
@@ -2135,18 +2135,6 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
 
         if (u->cache_status == NGX_HTTP_CACHE_BYPASS) {
 
-            if (ngx_http_file_cache_new(r) != NGX_OK) {
-                ngx_http_upstream_finalize_request(r, u, 0);
-                return;
-            }
-
-            if (u->create_key(r) != NGX_OK) {
-                ngx_http_upstream_finalize_request(r, u, 0);
-                return;
-            }
-
-            /* TODO: add keys */
-
             r->cache->min_uses = u->conf->cache_min_uses;
             r->cache->body_start = u->conf->buffer_size;
             r->cache->file_cache = u->conf->cache->data;