From e539cabc00ab0bfb48d2d276e40df5e454bf94fd Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 23 Sep 2025 17:44:54 +0200 Subject: [PATCH] Allow to re-allocate (ensure) buffers after clearing them This fixes a crash when removing and re-adding regionFX. Removing all FX clears the _readcache BufferSet (see AudioRegion::remove_plugin). BufferSet::clear() calls _buffers.clear(); leading to a assert/crash when adding a new regionFX plugin which calls BufferSet::ensure_buffers. --- libs/ardour/buffer_set.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libs/ardour/buffer_set.cc b/libs/ardour/buffer_set.cc index 37128bc930..341a058a2d 100644 --- a/libs/ardour/buffer_set.cc +++ b/libs/ardour/buffer_set.cc @@ -155,12 +155,20 @@ void BufferSet::ensure_buffers(DataType type, size_t num_buffers, size_t buffer_capacity) { assert(type != DataType::NIL); - assert(type < _buffers.size()); + assert(type < _buffers.capacity()); if (num_buffers == 0) { return; } + /* after a clear (), re-initlaize buffers */ + if (_buffers.empty ()) { + for (size_t i=0; i < DataType::num_types; ++i) { + _buffers.push_back(BufferVec()); + } + } + assert(_buffers.size() == DataType::num_types); + // The vector of buffers of the type we care about BufferVec& bufs = _buffers[type];