diff --git a/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.cpp b/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.cpp index 53c2ae3b1..b6281d291 100644 --- a/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.cpp +++ b/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.cpp @@ -13,7 +13,7 @@ using namespace Analyser::Dynamic; -MultiCRTMachine::MultiCRTMachine(const std::vector> &machines, std::mutex &machines_mutex) : +MultiCRTMachine::MultiCRTMachine(const std::vector> &machines, std::recursive_mutex &machines_mutex) : machines_(machines), machines_mutex_(machines_mutex), queues_(machines.size()) { speaker_ = MultiSpeaker::create(machines); } @@ -25,7 +25,7 @@ void MultiCRTMachine::perform_parallel(const std::function machines_lock(machines_mutex_); + std::lock_guard machines_lock(machines_mutex_); std::lock_guard lock(mutex); outstanding_machines = machines_.size(); @@ -46,7 +46,7 @@ void MultiCRTMachine::perform_parallel(const std::function &function) { - std::lock_guard machines_lock(machines_mutex_); + std::lock_guard machines_lock(machines_mutex_); for(const auto &machine: machines_) { CRTMachine::Machine *const crt_machine = machine->crt_machine(); if(crt_machine) function(crt_machine); diff --git a/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.hpp b/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.hpp index bf6b3d083..1ecfff9fe 100644 --- a/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.hpp +++ b/Analyser/Dynamic/MultiMachine/Implementation/MultiCRTMachine.hpp @@ -31,7 +31,7 @@ namespace Dynamic { */ class MultiCRTMachine: public CRTMachine::Machine { public: - MultiCRTMachine(const std::vector> &machines, std::mutex &machines_mutex); + MultiCRTMachine(const std::vector> &machines, std::recursive_mutex &machines_mutex); /*! Informs the MultiCRTMachine that the order of machines has changed; the MultiCRTMachine @@ -60,7 +60,7 @@ class MultiCRTMachine: public CRTMachine::Machine { private: void run_for(const Cycles cycles) override {} const std::vector> &machines_; - std::mutex &machines_mutex_; + std::recursive_mutex &machines_mutex_; std::vector queues_; MultiSpeaker *speaker_ = nullptr; Delegate *delegate_ = nullptr; diff --git a/Analyser/Dynamic/MultiMachine/MultiMachine.cpp b/Analyser/Dynamic/MultiMachine/MultiMachine.cpp index 2a8eb80f7..bd59331cf 100644 --- a/Analyser/Dynamic/MultiMachine/MultiMachine.cpp +++ b/Analyser/Dynamic/MultiMachine/MultiMachine.cpp @@ -73,7 +73,7 @@ bool MultiMachine::would_collapse(const std::vector machines_lock(machines_mutex_); + std::lock_guard machines_lock(machines_mutex_); #ifdef DEBUG for(const auto &machine: machines_) { CRTMachine::Machine *crt = machine->crt_machine(); diff --git a/Analyser/Dynamic/MultiMachine/MultiMachine.hpp b/Analyser/Dynamic/MultiMachine/MultiMachine.hpp index d6e849ed6..e520c6fad 100644 --- a/Analyser/Dynamic/MultiMachine/MultiMachine.hpp +++ b/Analyser/Dynamic/MultiMachine/MultiMachine.hpp @@ -62,7 +62,7 @@ class MultiMachine: public ::Machine::DynamicMachine, public MultiCRTMachine::De void multi_crt_did_run_machines() override; std::vector> machines_; - std::mutex machines_mutex_; + std::recursive_mutex machines_mutex_; MultiConfigurable configurable_; MultiCRTMachine crt_machine_;