From 0a6aadf9019e39ecd75b280f113075f35e7afcb1 Mon Sep 17 00:00:00 2001 From: Alexander Block Date: Thu, 5 Dec 2019 22:48:37 +0100 Subject: [PATCH] Don't join thread in CQuorum::~CQuorum when called from within the thread --- src/llmq/quorums.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/llmq/quorums.cpp b/src/llmq/quorums.cpp index 06113fb8a926..78d69a4bc1a2 100644 --- a/src/llmq/quorums.cpp +++ b/src/llmq/quorums.cpp @@ -44,7 +44,9 @@ CQuorum::~CQuorum() { // most likely the thread is already done stopCachePopulatorThread = true; - if (cachePopulatorThread.joinable()) { + // watch out to not join the thread when we're called from inside the thread, which might happen on shutdown. This + // is because on shutdown the thread is the last owner of the shared CQuorum instance and thus the destroyer of it. + if (cachePopulatorThread.joinable() && cachePopulatorThread.get_id() != std::this_thread::get_id()) { cachePopulatorThread.join(); } }