summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/slavable.cc17
1 files changed, 13 insertions, 4 deletions
diff --git a/libs/ardour/slavable.cc b/libs/ardour/slavable.cc
index 4a759f5fef..e3af33becf 100644
--- a/libs/ardour/slavable.cc
+++ b/libs/ardour/slavable.cc
@@ -126,7 +126,11 @@ Slavable::unassign (boost::shared_ptr<VCA> v)
{
Glib::Threads::RWLock::WriterLock lm (master_lock);
(void) unassign_controls (v);
- _masters.erase (v->number());
+ if (v) {
+ _masters.erase (v->number());
+ } else {
+ _masters.clear ();
+ }
}
int
@@ -173,14 +177,19 @@ Slavable::unassign_controls (boost::shared_ptr<VCA> vca)
for (uint32_t n = 0; types[n] != NullAutomation; ++n) {
slave = boost::dynamic_pointer_cast<SlavableAutomationControl> (automation_control (types[n]));
+
if (!vca) {
/* unassign from all */
- slave->clear_masters ();
+ if (slave) {
+ slave->clear_masters ();
+ }
} else {
- slave->remove_master (master);
+ master = vca->automation_control (types[n]);
+ if (slave && master) {
+ slave->remove_master (master);
+ }
}
}
return 0;
}
-