aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2011-05-13 10:05:38 +0000
committerIgor Sysoev <igor@sysoev.ru>2011-05-13 10:05:38 +0000
commit0d6283918f3f7cb0ab25111a978b9c09fb5cbca6 (patch)
tree670ce508e9a519687da50b063f7559433810aa49 /src
parent768f7a05d21be55967955b401a9716082604a0ee (diff)
downloadnginx-0d6283918f3f7cb0ab25111a978b9c09fb5cbca6.tar.gz
nginx-0d6283918f3f7cb0ab25111a978b9c09fb5cbca6.zip
fix a broken cached response if bypass/no_cache directive values are different,
the bug has been introduced in r3700
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_file_cache.c4
-rw-r--r--src/http/ngx_http_upstream.c38
2 files changed, 14 insertions, 28 deletions
diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c
index fb1ab9854..03cd268b2 100644
--- a/src/http/ngx_http_file_cache.c
+++ b/src/http/ngx_http_file_cache.c
@@ -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;
}
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 914d72c84..8f1ee42c3 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -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;