From b52c4ac8a68e4108732f4a71afb9cdd15dfefb93 Mon Sep 17 00:00:00 2001 From: vsonnier Date: Sun, 27 Aug 2017 13:35:11 +0200 Subject: [PATCH] This lock is actually needed, restore it. --- src/demod/DemodulatorInstance.cpp | 6 ++++++ src/demod/DemodulatorInstance.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/demod/DemodulatorInstance.cpp b/src/demod/DemodulatorInstance.cpp index 1a96089..3efc504 100644 --- a/src/demod/DemodulatorInstance.cpp +++ b/src/demod/DemodulatorInstance.cpp @@ -83,6 +83,8 @@ DemodulatorInstance::DemodulatorInstance() { } DemodulatorInstance::~DemodulatorInstance() { + + std::lock_guard < std::recursive_mutex > lockData(m_thread_control_mutex); //now that DemodulatorInstance are managed through shared_ptr, we //should enter here ONLY when it is no longer used by any piece of code, anywhere. @@ -120,6 +122,8 @@ void DemodulatorInstance::setVisualOutputQueue(DemodulatorThreadOutputQueuePtr t void DemodulatorInstance::run() { + std::lock_guard < std::recursive_mutex > lockData(m_thread_control_mutex); + if (active) { return; } @@ -187,6 +191,8 @@ void DemodulatorInstance::setLabel(std::string labelStr) { bool DemodulatorInstance::isTerminated() { + std::lock_guard < std::recursive_mutex > lockData(m_thread_control_mutex); + bool audioTerminated = audioThread->isTerminated(); bool demodTerminated = demodulatorThread->isTerminated(); bool preDemodTerminated = demodulatorPreThread->isTerminated(); diff --git a/src/demod/DemodulatorInstance.h b/src/demod/DemodulatorInstance.h index 46f9d09..846aa86 100644 --- a/src/demod/DemodulatorInstance.h +++ b/src/demod/DemodulatorInstance.h @@ -139,6 +139,9 @@ private: DemodulatorThread *demodulatorThread; DemodulatorThreadControlCommandQueuePtr threadQueueControl; + //protects child thread creation and termination + std::recursive_mutex m_thread_control_mutex; + std::atomic label; // // User editable buffer, 16 bit string. std::atomic user_label;