diff --git a/base/src/PipeLine.cpp b/base/src/PipeLine.cpp index ac71af661..2a5ae6382 100755 --- a/base/src/PipeLine.cpp +++ b/base/src/PipeLine.cpp @@ -232,6 +232,11 @@ void PipeLine::stop() i->get()->stop(); } } + + if ((modules[0]->controlModule) != nullptr) + { + modules[0]->controlModule->stop(); + } } void PipeLine::wait_for_all(bool ignoreStatus) @@ -242,15 +247,15 @@ void PipeLine::wait_for_all(bool ignoreStatus) return; } - for (auto i = modules.begin(); i != modules.end(); i++) + if ((modules[0]->controlModule) != nullptr) { - Module& m = *(i->get()); + Module& m = *(modules[0]->controlModule); m.myThread.join(); } - if ((modules[0]->controlModule) != nullptr) + for (auto i = modules.begin(); i != modules.end(); i++) { - Module& m = *(modules[0]->controlModule); + Module& m = *(i->get()); m.myThread.join(); } } @@ -264,12 +269,6 @@ void PipeLine::interrupt_wait_for_all() return; } - for (auto i = modules.begin(); i != modules.end(); i++) - { - Module& m = *(i->get()); - m.myThread.interrupt(); - } - if ((modules[0]->controlModule) != nullptr) { Module& m = *(modules[0]->controlModule); @@ -279,7 +278,7 @@ void PipeLine::interrupt_wait_for_all() for (auto i = modules.begin(); i != modules.end(); i++) { Module& m = *(i->get()); - m.myThread.join(); + m.myThread.interrupt(); } if ((modules[0]->controlModule) != nullptr) @@ -288,6 +287,12 @@ void PipeLine::interrupt_wait_for_all() m.myThread.join(); } + for (auto i = modules.begin(); i != modules.end(); i++) + { + Module& m = *(i->get()); + m.myThread.join(); + } + myStatus = PL_STOPPED; }