summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-10-12 17:46:17 +0000
committerCarl Hetherington <carl@carlh.net>2009-10-12 17:46:17 +0000
commitc221b09560842b71773eee15972d87c222baf6a1 (patch)
treef662857f688abcea219f099f41ad4f787459e623 /libs/ardour
parent25102143b24533145d16e7aeb204810541ebfd6c (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.h4
-rw-r--r--libs/ardour/control_protocol_manager.cc17
-rw-r--r--libs/ardour/globals.cc2
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;