diff --git a/src/oatpp/async/Executor.cpp b/src/oatpp/async/Executor.cpp index bae0c5ad..286f2f35 100644 --- a/src/oatpp/async/Executor.cpp +++ b/src/oatpp/async/Executor.cpp @@ -66,16 +66,22 @@ void Executor::SubmissionProcessor::pushOneTask(CoroutineHandle* task) { } void Executor::SubmissionProcessor::stop() { - m_isRunning = false; - m_processor.stop(); + if (m_isRunning) { + m_isRunning = false; + m_processor.stop(); + } } void Executor::SubmissionProcessor::join() { - m_thread.join(); + if (m_thread.joinable()) { + m_thread.join(); + } } void Executor::SubmissionProcessor::detach() { - m_thread.detach(); + if (m_thread.joinable()) { + m_thread.detach(); + } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/oatpp/async/Executor.hpp b/src/oatpp/async/Executor.hpp index 38741c95..ff168543 100644 --- a/src/oatpp/async/Executor.hpp +++ b/src/oatpp/async/Executor.hpp @@ -54,6 +54,10 @@ private: std::thread m_thread; public: SubmissionProcessor(); + ~SubmissionProcessor() override { + stop(); + join(); + } public: template