From 0e40f030ad7654227a43c69ee5505ba3adf5bf35 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 16 Aug 2023 09:32:41 -0600 Subject: [PATCH] reversible domain swaps for Locations --- libs/ardour/location.cc | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc index b7a1ec4591..3cad76256d 100644 --- a/libs/ardour/location.cc +++ b/libs/ardour/location.cc @@ -1919,19 +1919,28 @@ Locations::clear_cue_markers (samplepos_t start, samplepos_t end) void Locations::start_domain_bounce (Temporal::DomainBounceInfo& cmd) { - Glib::Threads::RWLock::WriterLock lm (_lock); + _session.add_command (new MementoCommand (*this, &get_state(), nullptr)); + { + Glib::Threads::RWLock::ReaderLock lm (_lock); - for (auto & l : locations) { - l->start_domain_bounce (cmd); + for (auto & l : locations) { + l->start_domain_bounce (cmd); + } } } void Locations::finish_domain_bounce (Temporal::DomainBounceInfo& cmd) { - for (auto & l : locations) { - l->finish_domain_bounce (cmd); + { + /* We modify locations, but we do not change the list */ + Glib::Threads::RWLock::ReaderLock lm (_lock); + + for (auto & l : locations) { + l->finish_domain_bounce (cmd); + } } + _session.add_command (new MementoCommand (*this, nullptr, &get_state())); } void