From a802bdc764d4319af2aaaaca3d9adaa7c2aa9dd4 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Wed, 1 Dec 2021 10:02:01 +0100 Subject: [PATCH] Prevent accidental stopping of BoostThreadWorker before destruction --- src/slic3r/GUI/Jobs/BoostThreadWorker.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp b/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp index 3d0cdb678f..21455e103a 100644 --- a/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp +++ b/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp @@ -94,9 +94,9 @@ constexpr int ABORT_WAIT_MAX_MS = 10000; BoostThreadWorker::~BoostThreadWorker() { - replace_job(*this, nullptr); - try { + cancel_all(); + m_input_queue.push(JobEntry{nullptr}); join(ABORT_WAIT_MAX_MS); } catch(...) { BOOST_LOG_TRIVIAL(error) @@ -130,8 +130,10 @@ void BoostThreadWorker::process_events() bool BoostThreadWorker::start_next(std::unique_ptr job) { - m_input_queue.push(JobEntry{std::move(job)}); - return true; + if (job) + m_input_queue.push(JobEntry{std::move(job)}); + + return bool{job}; } }} // namespace Slic3r::GUI