From f2e7ed91cb189ac32693e94a3c3e1f97f7a32f04 Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Fri, 15 Sep 2023 08:40:21 -0700 Subject: [PATCH] Fix for panic in consumer, needed to recheck if consumer was closed Signed-off-by: Derek Collison --- server/consumer.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server/consumer.go b/server/consumer.go index 2f90a7c8..dc6513fd 100644 --- a/server/consumer.go +++ b/server/consumer.go @@ -3794,7 +3794,9 @@ func (o *consumer) loopAndGatherMsgs(qch chan struct{}) { sz int wrn, wrb int ) + o.mu.Lock() + // consumer is closed when mset is set to nil. if o.mset == nil { o.mu.Unlock() @@ -3817,6 +3819,13 @@ func (o *consumer) loopAndGatherMsgs(qch chan struct{}) { // Grab our next msg. pmsg, dc, err = o.getNextMsg() + // We can release the lock now under getNextMsg so need to check this condition again here. + // consumer is closed when mset is set to nil. + if o.mset == nil { + o.mu.Unlock() + return + } + // On error either wait or return. if err != nil || pmsg == nil { // On EOF we can optionally fast sync num pending state.