From 74735711595c3f0dc29177f767b2c91beef19617 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Fri, 16 Sep 2022 14:41:06 -0500 Subject: [PATCH] worker: prevent deadlock by flooding worker.Messages channel Send to worker.Messages in goroutine to prevent deadlocks: the UI can fill the worker.Actions channel. The worker can generate more than one Message per action, and if it generates enough to fill the worker.Messages channel from a single message while the worker.Actions channel is full, a deadlock occurs. Signed-off-by: Tim Culverhouse Acked-by: Robin Jarry --- worker/types/worker.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/worker/types/worker.go b/worker/types/worker.go index ba396aa..5a964f2 100644 --- a/worker/types/worker.go +++ b/worker/types/worker.go @@ -64,7 +64,10 @@ func (worker *Worker) PostMessage(msg WorkerMessage, } else { logging.Debugf("PostMessage %T", msg) } - worker.Messages <- msg + // This one needs to be in a separate goroutine to prevent deadlocks + go func() { + worker.Messages <- msg + }() if cb != nil { worker.messageCallbacks[msg.getId()] = cb