From de1282c98daa98962523708c1d91e01934be6958 Mon Sep 17 00:00:00 2001 From: Lev Brouk Date: Tue, 10 Oct 2023 18:08:18 -0700 Subject: [PATCH] Fixed a crash in MQTT outgoing PUBREL This really was a cut/paste/typo error. The effect was that when there was a pending PUBREL in JetStream, we would sometimes attempt to deliver it immediately once the client connected, cpending was already initialized, but the pubrel map was not (yet). --- server/mqtt.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/mqtt.go b/server/mqtt.go index c0d17f26..5e5f8dab 100644 --- a/server/mqtt.go +++ b/server/mqtt.go @@ -2891,10 +2891,11 @@ func (sess *mqttSession) trackAsPubRel(pi uint16, jsAckSubject string) { sseq, _, _ := ackReplyInfo(jsAckSubject) - var sseqToPi map[uint64]uint16 if sess.cpending == nil { sess.cpending = make(map[string]map[uint64]uint16) - } else if sseqToPi = sess.cpending[jsDur]; sseqToPi == nil { + } + sseqToPi := sess.cpending[jsDur] + if sseqToPi == nil { sseqToPi = make(map[uint64]uint16) sess.cpending[jsDur] = sseqToPi }