13
0

VST3: handle offline FX processing callbacks

This fixes potential deadlocks, when not using rt
process threads.
This commit is contained in:
Robin Gareus 2024-08-06 20:30:20 +02:00
parent 3f1486fa12
commit 558e32e639
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -1676,7 +1676,7 @@ VST3PI::restartComponent (int32 flags)
if (flags & Vst::kReloadComponent) {
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced) {
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced && !_process_offline) {
pl.acquire ();
} else {
assert (0); // a plugin should not call this while processing
@ -1694,7 +1694,7 @@ VST3PI::restartComponent (int32 flags)
}
if (flags & Vst::kParamValuesChanged) {
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced) {
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced && !_process_offline) {
pl.acquire ();
}
update_shadow_data ();
@ -1709,7 +1709,7 @@ VST3PI::restartComponent (int32 flags)
* changes are automatically picked up.
*/
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced) {
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced && !_process_offline) {
/* Some plugins (e.g BlendEQ) call this from the process,
* IPlugProcessor::ProcessBuffers. In that case taking the
* _process_lock would deadlock.