From 7ef0cc5651351d92d1988898e6991c77f11c614c Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Thu, 4 Nov 2021 15:09:40 -0700 Subject: [PATCH] Fix for race on js.cluster status Signed-off-by: Derek Collison --- server/jetstream.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/jetstream.go b/server/jetstream.go index 5181be3f..f7607261 100644 --- a/server/jetstream.go +++ b/server/jetstream.go @@ -1485,8 +1485,15 @@ func (jsa *jsAccount) remoteUpdateUsage(sub *subscription, c *client, _ *Account // Updates accounting on in use memory and storage. This is called from locally // by the lower storage layers. func (jsa *jsAccount) updateUsage(storeType StorageType, delta int64) { - jsa.mu.Lock() + // Never changes so ok with no lock. js := jsa.js + + // Grab clustered state. + js.mu.RLock() + isClustered := js.cluster != nil + js.mu.RUnlock() + + jsa.mu.Lock() if storeType == MemoryStorage { jsa.usage.mem += delta jsa.memTotal += delta @@ -1503,7 +1510,7 @@ func (jsa *jsAccount) updateUsage(storeType StorageType, delta int64) { } } // Publish our local updates if in clustered mode. - if js.cluster != nil { + if isClustered { jsa.sendClusterUsageUpdate() } jsa.mu.Unlock()