From 2e8be594e7957da51d4b8b9164556c549d66b448 Mon Sep 17 00:00:00 2001 From: Peter Kosyh Date: Wed, 7 Nov 2018 05:48:07 +0000 Subject: [PATCH] mail_daemon: IMAPConnectionWorker missing ::WorkerQuit() on errors This fixes some crashes. In _Worker thread on connect or process errors fOwner.WorkerQuit(this) was not called, leaving destroyed thread object in fWorkerMap and fWorkers. Moreover, on connection problem the imap mailboxes was never checked on next planned sync because of non empty fWorkers. Change-Id: I55ce6474b655fad5ddd8024225fc8f633bc35c48 Reviewed-on: https://review.haiku-os.org/678 Reviewed-by: Adrien Destugues Reviewed-by: waddlesplash --- .../inbound_protocols/imap/IMAPConnectionWorker.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPConnectionWorker.cpp b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPConnectionWorker.cpp index ba0c2c2f82..cb747e5678 100644 --- a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPConnectionWorker.cpp +++ b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPConnectionWorker.cpp @@ -733,13 +733,16 @@ IMAPConnectionWorker::_Worker() CommandDeleter deleter(*this, command); status_t status = _Connect(); - if (status != B_OK) + if (status != B_OK) { + fOwner.WorkerQuit(this); return status; + } status = command->Process(*this); - if (status != B_OK) + if (status != B_OK) { + fOwner.WorkerQuit(this); return status; - + } if (!command->IsDone()) { deleter.Detach(); command->SetContinuation();