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.
ctx->cache = cache;
- cache_wrlock(cache);
+ cache_rdlock(cache);
while (1) {
node = eb32_lookup_ge(&cache->entries, next_key);
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);
}