From 00fc76c01b59e26c8da6ac63797c33dc8951de16 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Tue, 21 Mar 2023 08:59:42 +0100 Subject: [PATCH] fix: calling message queue Shutdown twice causes panic (because close is called twice on done channel) --- messagequeue/messagequeue.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/messagequeue/messagequeue.go b/messagequeue/messagequeue.go index ea606423..cec616b4 100644 --- a/messagequeue/messagequeue.go +++ b/messagequeue/messagequeue.go @@ -68,6 +68,7 @@ type MessageQueue struct { outgoingWork chan struct{} done chan struct{} + doneOnce sync.Once // internal do not touch outside go routines sender gsnet.MessageSender @@ -144,7 +145,9 @@ func (mq *MessageQueue) Startup() { // Shutdown stops the processing of messages for a message queue. func (mq *MessageQueue) Shutdown() { - close(mq.done) + mq.doneOnce.Do(func() { + close(mq.done) + }) } func (mq *MessageQueue) runQueue() {