From eb0ae8bcddc1021b815fec10e7b451193c6c4b6d Mon Sep 17 00:00:00 2001 From: Apti Umayev Date: Fri, 11 Feb 2022 07:30:11 +0100 Subject: [PATCH] Fix cache mutex lock --- middleware/cache/cache.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/middleware/cache/cache.go b/middleware/cache/cache.go index f27b7638ab9..aefe5c12a84 100644 --- a/middleware/cache/cache.go +++ b/middleware/cache/cache.go @@ -70,9 +70,8 @@ func New(config ...Config) fiber.Handler { // Get entry from pool e := manager.get(key) - // Lock entry and unlock when finished + // Lock entry mux.Lock() - defer mux.Unlock() // Get timestamp ts := atomic.LoadUint64(×tamp) @@ -105,15 +104,24 @@ func New(config ...Config) fiber.Handler { c.Set(cfg.CacheHeader, cacheHit) + mux.Unlock() + // Return response return nil } + // make sure we're not blocking concurrent requests - do unlock + mux.Unlock() + // Continue stack, return err to Fiber if exist if err := c.Next(); err != nil { return err } + // lock entry back and unlock on finish + mux.Lock() + defer mux.Unlock() + // Don't cache response if Next returns true if cfg.Next != nil && cfg.Next(c) { c.Set(cfg.CacheHeader, cacheUnreachable)