From c3b55240b183e5bb5bfe276e0bf20ca916cee209 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 15 Dec 2023 08:50:10 +0100 Subject: [PATCH] Fix erasing events in MIDIBuffer When the last event in a MIDI buffer was erased, the whole buffer was assumed to be empty (bug introduced in 7.5-96-gc5511040ec) --- libs/ardour/ardour/midi_buffer.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h index 67d512b4f8..4ea57e6b67 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -153,12 +153,18 @@ public: size_t total_data_deleted = align32 (sizeof(TimeType) + sizeof (Evoral::EventType) + event_size); - if (i.offset + total_data_deleted >= _size) { + if (total_data_deleted >= _size) { _size = 0; _silent = true; return end(); } + if (i.offset + total_data_deleted >= _size) { + assert (_size > total_data_deleted); + _size -= total_data_deleted; + return end(); + } + /* we need to avoid the temporary malloc that memmove would do, so copy by hand. remember: this is small amounts of data ... */