From 60fa2d8781e16f1ba811ee578fdab0ffaaadf334 Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Thu, 31 Aug 2023 16:50:22 -0700 Subject: [PATCH] Only have removeMsg release lock if it really has a callback. Signed-off-by: Derek Collison --- server/filestore.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/server/filestore.go b/server/filestore.go index ccb09cd5..e3d5413d 100644 --- a/server/filestore.go +++ b/server/filestore.go @@ -3506,21 +3506,23 @@ func (fs *fileStore) removeMsg(seq uint64, secure, viaLimits, needFSLock bool) ( fs.kickFlushStateLoop() } - cb := fs.scb - fs.mu.Unlock() - - // Storage updates. - if cb != nil { - subj := _EMPTY_ + if cb := fs.scb; cb != nil { + // If we have a callback registered we need to release lock regardless since cb might need it to lookup msg, etc. + fs.mu.Unlock() + // Storage updates. + var subj string if sm != nil { subj = sm.subj } delta := int64(msz) cb(-1, -delta, seq, subj) - } - if !needFSLock { - fs.mu.Lock() + if !needFSLock { + fs.mu.Lock() + } + } else if needFSLock { + // We acquired it so release it. + fs.mu.Unlock() } return true, nil