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();