From 893aef7c42fda4eea264b59fa24901b2550cdaf5 Mon Sep 17 00:00:00 2001 From: MoneroOcean Date: Thu, 11 Oct 2018 13:32:21 +0200 Subject: [PATCH] Fixed race condition with soft_stop and onTick --- src/workers/Workers.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/workers/Workers.cpp b/src/workers/Workers.cpp index a253a620..77254186 100644 --- a/src/workers/Workers.cpp +++ b/src/workers/Workers.cpp @@ -218,11 +218,13 @@ void Workers::soft_stop() // stop current workers leaving uv stuff intact (used m_sequence = 0; m_paused = 0; - for (size_t i = 0; i < m_workers.size(); ++i) { - m_workers[i]->join(); - delete m_workers[i]; - } + std::vector Workers::old_workers = m_workers; m_workers.clear(); + + for (Handle *handle : old_workers) { + handle->join(); + delete handle; + } } // setups workers based on specified algorithm (or its basic perf algo more specifically) @@ -281,8 +283,8 @@ void Workers::stop() m_paused = 0; m_sequence = 0; - for (size_t i = 0; i < m_workers.size(); ++i) { - m_workers[i]->join(); + for (Handle *handle : m_workers) { + handle->join(); } }