diff options
author | Igor Sysoev <igor@sysoev.ru> | 2011-05-13 10:05:38 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2011-05-13 10:05:38 +0000 |
commit | 0d6283918f3f7cb0ab25111a978b9c09fb5cbca6 (patch) | |
tree | 670ce508e9a519687da50b063f7559433810aa49 /src | |
parent | 768f7a05d21be55967955b401a9716082604a0ee (diff) | |
download | nginx-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.c | 4 | ||||
-rw-r--r-- | src/http/ngx_http_upstream.c | 38 |
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; |