summaryrefslogtreecommitdiff
path: root/libs/ardour/slavable_automation_control.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-06-01 15:15:03 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-06-01 15:15:13 -0400
commit85a9ff800735a32d415ef9d6d28fac9dc64498d8 (patch)
tree6de38d9798d40fb1d3c569ba0ad44d3c603dc4bd /libs/ardour/slavable_automation_control.cc
parenteeed8edf829941e13d74adcd287e393f39b22ef8 (diff)
fix crash during session deletion while removing VCA masters
Diffstat (limited to 'libs/ardour/slavable_automation_control.cc')
-rw-r--r--libs/ardour/slavable_automation_control.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/libs/ardour/slavable_automation_control.cc b/libs/ardour/slavable_automation_control.cc
index 4da324515a..d4002343e8 100644
--- a/libs/ardour/slavable_automation_control.cc
+++ b/libs/ardour/slavable_automation_control.cc
@@ -250,18 +250,22 @@ SlavableAutomationControl::remove_master (boost::shared_ptr<AutomationControl> m
pre_remove_master (m);
-
{
Glib::Threads::RWLock::WriterLock lm (master_lock);
current_value = get_value_locked ();
erased = _masters.erase (m->id());
- if (erased) {
+ if (erased && !_session.deletion_in_progress()) {
recompute_masters_ratios (current_value);
}
masters_left = _masters.size ();
new_value = get_value_locked ();
}
+ if (_session.deletion_in_progress()) {
+ /* no reason to care about new values or sending signals */
+ return;
+ }
+
if (erased) {
MasterStatusChange (); /* EMIT SIGNAL */
}