From 1971b5c32489afec0756a04e6af39cc8e950a32b Mon Sep 17 00:00:00 2001 From: winglq Date: Mon, 6 Jan 2020 11:22:59 +0800 Subject: [PATCH] update retained message even if it's already there (#70) Signed-off-by: Liu Qing --- broker/lib/topics/memtopics.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/broker/lib/topics/memtopics.go b/broker/lib/topics/memtopics.go index 47e958a..23a795a 100644 --- a/broker/lib/topics/memtopics.go +++ b/broker/lib/topics/memtopics.go @@ -104,7 +104,7 @@ func (this *memTopics) Retain(msg *packets.PublishPacket) error { return this.rroot.rremove([]byte(msg.TopicName)) } - return this.rroot.rinsert([]byte(msg.TopicName), msg) + return this.rroot.rinsertOrUpdate([]byte(msg.TopicName), msg) } func (this *memTopics) Retained(topic []byte, msgs *[]*packets.PublishPacket) error { @@ -286,13 +286,11 @@ func newRNode() *rnode { } } -func (this *rnode) rinsert(topic []byte, msg *packets.PublishPacket) error { +func (this *rnode) rinsertOrUpdate(topic []byte, msg *packets.PublishPacket) error { // If there's no more topic levels, that means we are at the matching rnode. if len(topic) == 0 { // Reuse the message if possible - if this.msg == nil { - this.msg = msg - } + this.msg = msg return nil } @@ -315,7 +313,7 @@ func (this *rnode) rinsert(topic []byte, msg *packets.PublishPacket) error { this.rnodes[level] = n } - return n.rinsert(rem, msg) + return n.rinsertOrUpdate(rem, msg) } // Remove the retained message for the supplied topic