summaryrefslogtreecommitdiff
path: root/libs/ardour/control_group.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-04-11 09:46:45 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:40 -0400
commitb042072df4fcf8fd036965d2c9f5d17c34e0d2c1 (patch)
tree0c80ad20ce236d3599fe8da6aebd48cf5c0c154d /libs/ardour/control_group.cc
parentb2b5c965c854d222f70080de5fcafb10b75ff40b (diff)
fix logic for removing an AutomationControl from a ControlGroup
Diffstat (limited to 'libs/ardour/control_group.cc')
-rw-r--r--libs/ardour/control_group.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/libs/ardour/control_group.cc b/libs/ardour/control_group.cc
index 6752940d27..2fe6af26ef 100644
--- a/libs/ardour/control_group.cc
+++ b/libs/ardour/control_group.cc
@@ -104,9 +104,19 @@ ControlGroup::control_going_away (boost::weak_ptr<AutomationControl> wac)
int
ControlGroup::remove_control (boost::shared_ptr<AutomationControl> ac)
{
- Glib::Threads::RWLock::WriterLock lm (controls_lock);
+ int erased;
+
+ {
+ Glib::Threads::RWLock::WriterLock lm (controls_lock);
+ erased = _controls.erase (ac->id());
+ }
+
+ if (erased) {
+ ac->set_group (boost::shared_ptr<ControlGroup>());
+ }
+
/* return zero if erased, non-zero otherwise */
- return !(_controls.erase (ac->id()) > 0);
+ return !erased;
}
int