diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-04-11 09:46:45 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:40 -0400 |
commit | b042072df4fcf8fd036965d2c9f5d17c34e0d2c1 (patch) | |
tree | 0c80ad20ce236d3599fe8da6aebd48cf5c0c154d /libs/ardour/control_group.cc | |
parent | b2b5c965c854d222f70080de5fcafb10b75ff40b (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.cc | 14 |
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 |