X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fcontrol_protocol_manager.cc;h=c2929a396870a5dc1ba660812f70f97f51570832;hb=9775c5c9f1b81340f3177ede038f02faed71c887;hp=7205b3e79e18368b429b8b62e814a729263ee56c;hpb=0f20819c8643974ce6d52fc1dc7ec3a18877d05b;p=ardour.git diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc index 7205b3e79e..c2929a3968 100644 --- a/libs/ardour/control_protocol_manager.cc +++ b/libs/ardour/control_protocol_manager.cc @@ -76,6 +76,7 @@ ControlProtocolManager::~ControlProtocolManager() for (list::iterator p = control_protocol_info.begin(); p != control_protocol_info.end(); ++p) { + (*p)->protocol = 0; // protocol was already destroyed above. delete (*p); } @@ -87,27 +88,11 @@ ControlProtocolManager::set_session (Session* s) { SessionHandlePtr::set_session (s); - if (_session) { - - /* get selection info and set it before instantiating any - * control protocols. - */ - - CoreSelection::StripableAutomationControls sac; - _session->selection().get_stripables (sac); - - if (!sac.empty()) { - StripableNotificationListPtr v (new StripableNotificationList); - for (CoreSelection::StripableAutomationControls::iterator i = sac.begin(); i != sac.end(); ++i) { - if ((*i).stripable) { - v->push_back (boost::weak_ptr ((*i).stripable)); - } - } - if (!v->empty()) { - StripableSelectionChanged (v); /* EMIT SIGNAL */ - } - } + if (!_session) { + return; + } + { Glib::Threads::RWLock::ReaderLock lm (protocols_lock); for (list::iterator i = control_protocol_info.begin(); i != control_protocol_info.end(); ++i) { @@ -116,6 +101,21 @@ ControlProtocolManager::set_session (Session* s) } } } + + CoreSelection::StripableAutomationControls sac; + _session->selection().get_stripables (sac); + + if (!sac.empty()) { + StripableNotificationListPtr v (new StripableNotificationList); + for (CoreSelection::StripableAutomationControls::iterator i = sac.begin(); i != sac.end(); ++i) { + if ((*i).stripable) { + v->push_back (boost::weak_ptr ((*i).stripable)); + } + } + if (!v->empty()) { + StripableSelectionChanged (v); /* EMIT SIGNAL */ + } + } } int @@ -483,7 +483,9 @@ ControlProtocolManager::set_state (const XMLNode& node, int /*version*/) ControlProtocolInfo* cpi = cpi_by_name (name); if (cpi) { +#ifndef NDEBUG std::cerr << "protocol " << name << " active ? " << active << std::endl; +#endif if (active) { delete cpi->state;