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:
parent
3ff352be79
commit
8402537493
@ -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()))
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user