From 66ad91d59ca61d6b9a6a3f1eba10d13a08a28dc2 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Tue, 4 Mar 2025 18:14:50 +0200 Subject: [PATCH 1/2] fix(coderd/cryptokeys): relock mutex to avoid double unlock --- coderd/cryptokeys/cache.go | 1 + 1 file changed, 1 insertion(+) diff --git a/coderd/cryptokeys/cache.go b/coderd/cryptokeys/cache.go index 43d673548ce06..d0c2179207cf4 100644 --- a/coderd/cryptokeys/cache.go +++ b/coderd/cryptokeys/cache.go @@ -255,6 +255,7 @@ func (c *cache) cryptoKey(ctx context.Context, sequence int32) (string, []byte, keys, err := c.cryptoKeys(ctx) if err != nil { + c.mu.Lock() // Re-lock because of defer. return "", nil, xerrors.Errorf("get keys: %w", err) } From 148d4b7b20c5f40ba5662fe345938d5fcebc8228 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Tue, 4 Mar 2025 18:57:03 +0200 Subject: [PATCH 2/2] move lock --- coderd/cryptokeys/cache.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/coderd/cryptokeys/cache.go b/coderd/cryptokeys/cache.go index d0c2179207cf4..0b2af2fa73ca4 100644 --- a/coderd/cryptokeys/cache.go +++ b/coderd/cryptokeys/cache.go @@ -251,15 +251,14 @@ func (c *cache) cryptoKey(ctx context.Context, sequence int32) (string, []byte, } c.fetching = true - c.mu.Unlock() + c.mu.Unlock() keys, err := c.cryptoKeys(ctx) + c.mu.Lock() if err != nil { - c.mu.Lock() // Re-lock because of defer. return "", nil, xerrors.Errorf("get keys: %w", err) } - c.mu.Lock() c.lastFetch = c.clock.Now() c.refresher.Reset(refreshInterval) c.keys = keys