Check a task status inside HandleExt to handle concurrent issue
[platform/upstream/csr-framework.git] / src / framework / client / handle-ext.cpp
index 0b89eee..cf97924 100644 (file)
@@ -41,17 +41,32 @@ HandleExt::~HandleExt()
                this->m_worker.join();
 }
 
-void HandleExt::stop()
+void HandleExt::setStopFunc(std::function<void()> &&func)
+{
+       std::lock_guard<std::mutex> l(this->m_flagMutex);
+       this->m_stopFunc = std::move(func);
+}
+
+bool HandleExt::stop()
 {
        DEBUG("Stop & join worker...");
 
        {
                std::lock_guard<std::mutex> l(this->m_flagMutex);
+
+               if (!this->m_isRunning || this->m_stop)
+                       return false;
+
                this->m_stop = true;
+
+               if (this->m_stopFunc != nullptr)
+                       this->m_stopFunc();
        }
 
        if (this->m_worker.joinable())
                this->m_worker.join();
+
+       return true;
 }
 
 bool HandleExt::isStopped() const