summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-12-17 23:36:52 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-12-17 23:36:52 +0000
commit67460c2af45d0455e64623572480c064445c2e5b (patch)
tree90b001525f712a1523ae853e9d37660634c89a17 /libs
parentcbb272af44b6a3e3cb807d70a46b5f6d0d7ed109 (diff)
fix deadlock in protocol manager startup; fix some other ::set_session() SNAFUs; remove last boost::signals2::connection member from libardour
git-svn-id: svn://localhost/ardour2/branches/3.0@6375 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/track.h1
-rw-r--r--libs/ardour/control_protocol_manager.cc8
2 files changed, 6 insertions, 3 deletions
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index c23e159684..82b4f701b4 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -141,7 +141,6 @@ class Track : public Route
FreezeRecord _freeze_record;
XMLNode* pending_state;
- boost::signals2::scoped_connection recenable_connection;
bool _destructive;
boost::shared_ptr<RecEnableControllable> _rec_enable_control;
diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc
index 47f8d5bf98..1e793bb71b 100644
--- a/libs/ardour/control_protocol_manager.cc
+++ b/libs/ardour/control_protocol_manager.cc
@@ -110,6 +110,8 @@ ControlProtocolManager::session_going_away()
ControlProtocol*
ControlProtocolManager::instantiate (ControlProtocolInfo& cpi)
{
+ /* CALLER MUST HOLD LOCK */
+
if (_session == 0) {
return 0;
}
@@ -126,8 +128,6 @@ ControlProtocolManager::instantiate (ControlProtocolInfo& cpi)
return 0;
}
-
- Glib::Mutex::Lock lm (protocols_lock);
control_protocols.push_back (cpi.protocol);
return cpi.protocol;
@@ -172,6 +172,8 @@ ControlProtocolManager::load_mandatory_protocols ()
return;
}
+ Glib::Mutex::Lock lm (protocols_lock);
+
for (list<ControlProtocolInfo*>::iterator i = control_protocol_info.begin(); i != control_protocol_info.end(); ++i) {
if ((*i)->mandatory && ((*i)->protocol == 0)) {
info << string_compose (_("Instantiating mandatory control protocol %1"), (*i)->name) << endmsg;
@@ -293,6 +295,8 @@ ControlProtocolManager::set_state (const XMLNode& node, int /*version*/)
XMLNodeConstIterator citer;
XMLProperty* prop;
+ Glib::Mutex::Lock lm (protocols_lock);
+
clist = node.children();
for (citer = clist.begin(); citer != clist.end(); ++citer) {