diff options
author | Carl Hetherington <carl@carlh.net> | 2009-10-12 17:46:17 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-10-12 17:46:17 +0000 |
commit | c221b09560842b71773eee15972d87c222baf6a1 (patch) | |
tree | f662857f688abcea219f099f41ad4f787459e623 /libs/ardour | |
parent | 25102143b24533145d16e7aeb204810541ebfd6c (diff) |
Set up the ControlProtocolManager singleton in a slightly more robust way.
git-svn-id: svn://localhost/ardour2/branches/3.0@5768 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/control_protocol_manager.h | 4 | ||||
-rw-r--r-- | libs/ardour/control_protocol_manager.cc | 17 | ||||
-rw-r--r-- | libs/ardour/globals.cc | 2 |
3 files changed, 14 insertions, 9 deletions
diff --git a/libs/ardour/ardour/control_protocol_manager.h b/libs/ardour/ardour/control_protocol_manager.h index 359e1e8540..f315744e50 100644 --- a/libs/ardour/ardour/control_protocol_manager.h +++ b/libs/ardour/ardour/control_protocol_manager.h @@ -52,10 +52,9 @@ struct ControlProtocolInfo { class ControlProtocolManager : public sigc::trackable, public PBD::Stateful { public: - ControlProtocolManager (); ~ControlProtocolManager (); - static ControlProtocolManager& instance() { return *_instance; } + static ControlProtocolManager& instance(); void set_session (Session&); void discover_control_protocols (); @@ -75,6 +74,7 @@ struct ControlProtocolInfo { XMLNode& get_state (void); private: + ControlProtocolManager (); static ControlProtocolManager* _instance; Session* _session; diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc index be173e7102..f0bdfae874 100644 --- a/libs/ardour/control_protocol_manager.cc +++ b/libs/ardour/control_protocol_manager.cc @@ -39,12 +39,9 @@ ControlProtocolManager* ControlProtocolManager::_instance = 0; const string ControlProtocolManager::state_node_name = X_("ControlProtocols"); ControlProtocolManager::ControlProtocolManager () + : _session (0) { - if (_instance == 0) { - _instance = this; - } - - _session = 0; + } ControlProtocolManager::~ControlProtocolManager() @@ -388,3 +385,13 @@ ControlProtocolManager::set_protocol_states (const XMLNode& node) cpi->state = new XMLNode (*child); } } + +ControlProtocolManager& +ControlProtocolManager::instance () +{ + if (_instance == 0) { + _instance = new ControlProtocolManager (); + } + + return *_instance; +} diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index ca93345471..4d6498654f 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -356,8 +356,6 @@ ARDOUR::init (bool use_vst, bool try_optimization) void ARDOUR::init_post_engine () { - /* singleton - first object is "it" */ - new ControlProtocolManager (); ControlProtocolManager::instance().discover_control_protocols (); XMLNode* node; |