From 85992f9eb3212627681394e20f15f82be3ce1fdc Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Thu, 15 Jul 2010 13:08:51 +0000 Subject: [PATCH] delete empty cache zone node if we could not get response to cache --- src/http/ngx_http_file_cache.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c index 277475179..12a5e55ae 100644 --- a/src/http/ngx_http_file_cache.c +++ b/src/http/ngx_http_file_cache.c @@ -835,8 +835,9 @@ ngx_http_cache_send(ngx_http_request_t *r) void ngx_http_file_cache_free(ngx_http_request_t *r, ngx_temp_file_t *tf) { - ngx_http_cache_t *c; - ngx_http_file_cache_t *cache; + ngx_http_cache_t *c; + ngx_http_file_cache_t *cache; + ngx_http_file_cache_node_t *fcn; c = r->cache; @@ -853,15 +854,21 @@ ngx_http_file_cache_free(ngx_http_request_t *r, ngx_temp_file_t *tf) ngx_shmtx_lock(&cache->shpool->mutex); - c->node->count--; + fcn = c->node; + fcn->count--; + fcn->updating = 0; if (c->error) { - c->node->valid_sec = c->valid_sec; - c->node->valid_msec = c->valid_msec; - c->node->error = c->error; - } + fcn->valid_sec = c->valid_sec; + fcn->valid_msec = c->valid_msec; + fcn->error = c->error; - c->node->updating = 0; + } else if (fcn->valid_msec == 0 && fcn->count == 0) { + ngx_queue_remove(&fcn->queue); + ngx_rbtree_delete(&cache->sh->rbtree, &fcn->node); + ngx_slab_free_locked(cache->shpool, fcn); + c->node = NULL; + } ngx_shmtx_unlock(&cache->shpool->mutex);