From ff3cb6dad4eba1ab629b770e027664acc706588b Mon Sep 17 00:00:00 2001 From: Remi Tricot-Le Breton Date: Thu, 16 Nov 2023 17:38:16 +0100 Subject: [PATCH] MINOR: cache: Remove expired entry delete in "show cache" command The "show cache" CLI command iterates over all the entries of the cache tree and it used this opportunity to remove expired entries from the cache. This behavior was completely undocumented and does not seem that necessary. By removing it we can take the cache lock in read mode only which limits the impact on the other threads. --- src/cache.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/cache.c b/src/cache.c index 7de527498..d311f8f44 100644 --- a/src/cache.c +++ b/src/cache.c @@ -2671,7 +2671,7 @@ static int cli_io_handler_show_cache(struct appctx *appctx) ctx->cache = cache; - cache_wrlock(cache); + cache_rdlock(cache); while (1) { node = eb32_lookup_ge(&cache->entries, next_key); @@ -2690,21 +2690,17 @@ static int cli_io_handler_show_cache(struct appctx *appctx) chunk_appendf(&trash, " size:%u (%u blocks), refcount:%u, expire:%d\n", block_ptr(entry)->len, block_ptr(entry)->block_count, block_ptr(entry)->refcount, entry->expire - (int)date.tv_sec); - } else { - /* time to remove that one */ - delete_entry(entry); - entry->eb.key = 0; } ctx->next_key = next_key; if (applet_putchk(appctx, &trash) == -1) { - cache_wrunlock(cache); + cache_rdunlock(cache); return 0; } } - cache_wrunlock(cache); + cache_rdunlock(cache); }