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
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 {
}
}
+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 */
}
boost::shared_ptr<AutomationList> (new AutomationList (*this->_current.get()))
);
}
-