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