From 840253749326472cb7aecae70bcdd5a54c9ee842 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 12 Aug 2017 14:38:56 -0400 Subject: use a lock to set/get AutomationList automation state It isn't 100% clear that we should use the list's data lock, but it seems quite likely that this is the correct design, because of the interlock between data being present and automation state --- libs/ardour/automation_list.cc | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'libs/ardour/automation_list.cc') diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc index d92e65288f..3ffc040b62 100644 --- a/libs/ardour/automation_list.cc +++ b/libs/ardour/automation_list.cc @@ -192,16 +192,28 @@ AutomationList::maybe_signal_changed () } } +AutoState +AutomationList::automation_state() const +{ + Glib::Threads::RWLock::ReaderLock lm (Evoral::ControlList::_lock); + return _state; +} + void AutomationList::set_automation_state (AutoState s) { - if (s == _state) { - return; - } - _state = s; - if (s == Write && _desc.toggled) { - snapshot_history (true); + { + Glib::Threads::RWLock::ReaderLock lm (Evoral::ControlList::_lock); + + if (s == _state) { + return; + } + _state = s; + if (s == Write && _desc.toggled) { + snapshot_history (true); + } } + automation_state_changed (s); /* EMIT SIGNAL */ } @@ -588,4 +600,3 @@ AutomationListProperty::clone () const boost::shared_ptr (new AutomationList (*this->_current.get())) ); } - -- cgit v1.2.3