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
This commit is contained in:
Carl Hetherington 2009-10-12 17:46:17 +00:00
parent 25102143b2
commit c221b09560
3 changed files with 14 additions and 9 deletions

View file

@ -52,10 +52,9 @@ struct ControlProtocolInfo {
class ControlProtocolManager : public sigc::trackable, public PBD::Stateful class ControlProtocolManager : public sigc::trackable, public PBD::Stateful
{ {
public: public:
ControlProtocolManager ();
~ControlProtocolManager (); ~ControlProtocolManager ();
static ControlProtocolManager& instance() { return *_instance; } static ControlProtocolManager& instance();
void set_session (Session&); void set_session (Session&);
void discover_control_protocols (); void discover_control_protocols ();
@ -75,6 +74,7 @@ struct ControlProtocolInfo {
XMLNode& get_state (void); XMLNode& get_state (void);
private: private:
ControlProtocolManager ();
static ControlProtocolManager* _instance; static ControlProtocolManager* _instance;
Session* _session; Session* _session;

View file

@ -39,12 +39,9 @@ ControlProtocolManager* ControlProtocolManager::_instance = 0;
const string ControlProtocolManager::state_node_name = X_("ControlProtocols"); const string ControlProtocolManager::state_node_name = X_("ControlProtocols");
ControlProtocolManager::ControlProtocolManager () ControlProtocolManager::ControlProtocolManager ()
: _session (0)
{ {
if (_instance == 0) {
_instance = this;
}
_session = 0;
} }
ControlProtocolManager::~ControlProtocolManager() ControlProtocolManager::~ControlProtocolManager()
@ -388,3 +385,13 @@ ControlProtocolManager::set_protocol_states (const XMLNode& node)
cpi->state = new XMLNode (*child); cpi->state = new XMLNode (*child);
} }
} }
ControlProtocolManager&
ControlProtocolManager::instance ()
{
if (_instance == 0) {
_instance = new ControlProtocolManager ();
}
return *_instance;
}

View file

@ -356,8 +356,6 @@ ARDOUR::init (bool use_vst, bool try_optimization)
void void
ARDOUR::init_post_engine () ARDOUR::init_post_engine ()
{ {
/* singleton - first object is "it" */
new ControlProtocolManager ();
ControlProtocolManager::instance().discover_control_protocols (); ControlProtocolManager::instance().discover_control_protocols ();
XMLNode* node; XMLNode* node;