From: Remi Tricot-Le Breton Date: Thu, 16 Nov 2023 16:38:16 +0000 (+0100) Subject: MINOR: cache: Remove expired entry delete in "show cache" command X-Git-Tag: v2.9-dev10~59 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ff3cb6dad4eba1ab629b770e027664acc706588b;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/cache.c b/src/cache.c index 7de5274988..d311f8f448 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); }