diff --git a/src/proc/play/output-director.cpp b/src/proc/play/output-director.cpp index f9fd3ea30..416445700 100644 --- a/src/proc/play/output-director.cpp +++ b/src/proc/play/output-director.cpp @@ -60,19 +60,19 @@ namespace play { /** connect and bring up the external input/output connections, * handlers and interface services and the render/playback service. * @return true if the output subsystem can be considered operational - * - * @todo WIP-WIP-WIP 6/2011 */ bool OutputDirector::connectUp() { Lock sync(this); + REQUIRE (!shutdown_initiated_); player_.reset (new PlayService); return this->isOperational(); } + /** @todo WIP-WIP-WIP 6/2011 */ bool OutputDirector::isOperational() const { @@ -92,7 +92,11 @@ namespace play { void OutputDirector::triggerDisconnect (SigTerm completedSignal) throw() { - Thread ("Output shutdown supervisor", bind (&OutputDirector::bringDown, this, completedSignal)); + if (!shutdown_initiated_) + { + shutdown_initiated_ = true; + Thread ("Output shutdown supervisor", bind (&OutputDirector::bringDown, this, completedSignal)); + } } diff --git a/src/proc/play/output-director.hpp b/src/proc/play/output-director.hpp index 582b3d81c..90dc27245 100644 --- a/src/proc/play/output-director.hpp +++ b/src/proc/play/output-director.hpp @@ -76,6 +76,9 @@ namespace play { typedef lumiera::Subsys::SigTerm SigTerm; scoped_ptr player_; + ///////TODO more components and connections to manage here... + + bool shutdown_initiated_ = false; /////TODO probably need a way more elaborate lifecylce management public: static lib::Depend instance;