From f8a24db571773b5047b99b98f5390b283754f73e Mon Sep 17 00:00:00 2001 From: Manolo Carrasco Date: Fri, 30 Oct 2026 19:50:44 +0100 Subject: [PATCH] Fix #35454: Do not activate a VST before its processing is set up An instrument that finishes loading after its track was switched on, as happens when exporting parts, was activated without setupProcessing() and then processed with no output buffers. Assisted-by: Claude Code 2.1.306 (Claude Opus 5.5) --- src/framework/vst/internal/vstaudioclient.cpp | 9 +++++++++ src/framework/vst/internal/vstaudioclient.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/framework/vst/internal/vstaudioclient.cpp b/src/framework/vst/internal/vstaudioclient.cpp index 46c140cb7559..5f2f2c55a893 100644 --- a/src/framework/vst/internal/vstaudioclient.cpp +++ b/src/framework/vst/internal/vstaudioclient.cpp @@ -437,11 +437,13 @@ void VstAudioClient::updateProcessSetup() setup.sampleRate = m_outputSpec.sampleRate; if (processor->setupProcessing(setup) != Steinberg::kResultOk) { + m_isProcessingSetUp = false; return; } setUpProcessData(); flushBuffers(); + m_isProcessingSetUp = true; ensureActivity(); } @@ -551,6 +553,13 @@ void VstAudioClient::ensureActivity() return; } + //! NOTE: The plugin may finish loading after the track has already been + //! switched on (e.g. right before an export). Activating it before + //! setupProcessing() would let process() run without output buffers + if (!m_isProcessingSetUp) { + return; + } + IAudioProcessorPtr processor = pluginProcessor(); if (!processor) { return; diff --git a/src/framework/vst/internal/vstaudioclient.h b/src/framework/vst/internal/vstaudioclient.h index fddeba821c68..925d3a8e10f9 100644 --- a/src/framework/vst/internal/vstaudioclient.h +++ b/src/framework/vst/internal/vstaudioclient.h @@ -101,6 +101,7 @@ class VstAudioClient : public muse::Contextable bool m_needUnprepareProcessData = false; bool m_needUpdateState = false; + bool m_isProcessingSetUp = false; audioplugins::AudioPluginType m_type = audioplugins::AudioPluginType::Undefined; audio::OutputSpec m_outputSpec;