From: Bjørn Erik Pedersen Date: Fri, 23 Feb 2024 16:23:37 +0000 (+0100) Subject: cache/dynacache: Prevent multiple concurrent resizes X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=564bae06f6513cbca80bd54411f9a66ec2115995;p=brevno-suite%2Fhugo cache/dynacache: Prevent multiple concurrent resizes Updates #12129 --- 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()