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 <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
Tim Culverhouse 2022-09-16 14:41:06 -05:00 committed by Robin Jarry
parent f4d6ade429
commit 7473571159

View file

@ -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