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
This commit is contained in:
@@ -85,7 +85,7 @@ public:
|
||||
bool paste (const ControlList&, double, DoubleBeatsFramesConverter const&);
|
||||
|
||||
void set_automation_state (AutoState);
|
||||
AutoState automation_state() const { return _state; }
|
||||
AutoState automation_state() const;
|
||||
PBD::Signal1<void, AutoState> automation_state_changed;
|
||||
|
||||
bool automation_playback() const {
|
||||
|
||||
@@ -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<AutomationList> (new AutomationList (*this->_current.get()))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user