From 637379d7a2379f640d4dc3dfb050c59344ef0326 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 19 May 2016 13:10:05 -0400 Subject: fix some bugs with unassigning from a control master --- libs/ardour/slavable.cc | 17 +++++++++++++---- 1 file 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 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) for (uint32_t n = 0; types[n] != NullAutomation; ++n) { slave = boost::dynamic_pointer_cast (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; } - -- cgit v1.2.3