summaryrefslogtreecommitdiff
path: root/libs/ardour/slavable.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-05-19 13:10:05 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:43 -0400
commit637379d7a2379f640d4dc3dfb050c59344ef0326 (patch)
tree936003e8d98a5c3399e8e057fe00af5d0b95fd3b /libs/ardour/slavable.cc
parentc6ad232796d5bcae405c356a1e2bc3c4077533e0 (diff)
fix some bugs with unassigning from a control master
Diffstat (limited to 'libs/ardour/slavable.cc')
-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;
}
-