From 564bae06f6513cbca80bd54411f9a66ec2115995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 23 Feb 2024 17:23:37 +0100 Subject: [PATCH] cache/dynacache: Prevent multiple concurrent resizes Updates #12129 --- cache/dynacache/dynacache.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cache/dynacache/dynacache.go b/cache/dynacache/dynacache.go index 85b360138..0fd51590c 100644 --- a/cache/dynacache/dynacache.go +++ b/cache/dynacache/dynacache.go @@ -119,7 +119,8 @@ func (o OptionsPartition) CalculateMaxSize(maxSizePerPartition int) int { // A dynamic partitioned cache. type Cache struct { - mu sync.RWMutex + mu sync.RWMutex + resizeMu sync.Mutex partitions map[string]PartitionManager @@ -231,6 +232,12 @@ func (c *Cache) Stop() { } func (c *Cache) adjustCurrentMaxSize() { + if !c.resizeMu.TryLock() { + // Prevent multiple concurrent resizes. + return + } + defer c.resizeMu.Unlock() + c.mu.RLock() defer c.mu.RUnlock()