From a75c239c0cbabc462b58b9b9a752ab6b5e06c805 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 22 Mar 2021 02:54:42 +0100 Subject: [PATCH] Do not accumulate SessionEvent::Overwrite events #8576 --- libs/ardour/session_butler.cc | 2 +- libs/ardour/session_events.cc | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libs/ardour/session_butler.cc b/libs/ardour/session_butler.cc index 1149cd81c3..8d6e63f4d5 100644 --- a/libs/ardour/session_butler.cc +++ b/libs/ardour/session_butler.cc @@ -81,7 +81,7 @@ void Session::request_overwrite_buffer (boost::shared_ptr t, OverwriteReason why) { assert (t); - SessionEvent *ev = new SessionEvent (SessionEvent::Overwrite, SessionEvent::Add, SessionEvent::Immediate, 0, 0, 0.0); + SessionEvent *ev = new SessionEvent (SessionEvent::Overwrite, SessionEvent::Replace, SessionEvent::Immediate, 0, 0, 0.0); ev->set_track (t); ev->overwrite = why; queue_event (ev); diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc index db3ba85e0b..122780894b 100644 --- a/libs/ardour/session_events.cc +++ b/libs/ardour/session_events.cc @@ -253,7 +253,13 @@ SessionEventManager::_replace_event (SessionEvent* ev) /* private, used only for events that can only exist once in the queue */ for (i = events.begin(); i != events.end(); ++i) { - if ((*i)->type == ev->type) { + if ((*i)->type == ev->type && ev->type == SessionEvent::Overwrite && (*i)->track.lock() == ev->track.lock()) { + ret = true; + delete ev; + break; + } + else if ((*i)->type == ev->type && ev->type != SessionEvent::Overwrite) { + assert (ev->type == SessionEvent::PunchIn || ev->type == SessionEvent::PunchOut || ev->type == SessionEvent::AutoLoop); (*i)->action_sample = ev->action_sample; (*i)->target_sample = ev->target_sample; if ((*i) == ev) {