add mutex to prevent concurrent session state saves.

Why wasn't this done 10 years ago?
This commit is contained in:
Paul Davis 2014-07-09 10:18:28 -04:00
parent a0fdeed441
commit 57d0aa4354
2 changed files with 5 additions and 0 deletions

View file

@ -1135,6 +1135,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
friend class StateProtector;
gint _suspend_save; /* atomic */
volatile bool _save_queued;
Glib::Threads::Mutex save_state_lock;
int load_options (const XMLNode&);
int load_state (std::string snapshot_name);

View file

@ -689,6 +689,10 @@ Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot
XMLTree tree;
std::string xml_path(_session_dir->root_path());
/* prevent concurrent saves from different threads */
Glib::Threads::Mutex::Lock lm (save_state_lock);
if (!_writable || (_state_of_the_state & CannotSave)) {
return 1;
}