4c371170c5
The worker uses a buffered channel to queue tasks. Buffered channels are effective at FIFO, but are prone to blocking. The design of aerc is such that the UI must always accept a response from the backends, and the backends must always accept a request from the UI. By using buffered channels for both of these communication channels, a deadlock will occur. Break the chain by using a doubly linked list (container/list from the standard library) to queue tasks for the worker. Essentially, this is an infinitely buffered channel - but more memory efficient as it can change size dynamically. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Signed-off-by: Robin Jarry <robin@jarry.cc> |
||
---|---|---|
.. | ||
handlers | ||
imap | ||
lib | ||
maildir | ||
mbox | ||
notmuch | ||
types | ||
handler_notmuch.go | ||
worker.go | ||
worker_enabled.go |