diff --git a/vault/core.go b/vault/core.go index acba1cf674..f2858956e9 100644 --- a/vault/core.go +++ b/vault/core.go @@ -1663,6 +1663,11 @@ func (c *Core) emitMetrics(stopCh chan struct{}) { c.metricsMutex.Unlock() case <-writeTimer: + if stopped := grabLockOrStop(c.stateLock.RLock, c.stateLock.RUnlock, stopCh); stopped { + // Go through the loop again, this time the stop channel case + // should trigger + continue + } if c.perfStandby { syncCounter(c) } else { @@ -1671,6 +1676,7 @@ func (c *Core) emitMetrics(stopCh chan struct{}) { c.logger.Error("writing request counters to barrier", "err", err) } } + c.stateLock.RUnlock() case <-stopCh: return