diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-19 13:10:05 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:43 -0400 |
commit | 637379d7a2379f640d4dc3dfb050c59344ef0326 (patch) | |
tree | 936003e8d98a5c3399e8e057fe00af5d0b95fd3b /libs/ardour/slavable.cc | |
parent | c6ad232796d5bcae405c356a1e2bc3c4077533e0 (diff) |
fix some bugs with unassigning from a control master
Diffstat (limited to 'libs/ardour/slavable.cc')
-rw-r--r-- | libs/ardour/slavable.cc | 17 |
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; } - |