From d610c07e111eac87aacc0e521a32ea2eb476c777 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sun, 23 May 2021 19:00:16 +0200 Subject: [PATCH] Enable mutual recursion on effGetProgramName() PG-8X in REAPER has the same mutual recursion limitation the Voxengo plugins had in Renoise, but with `effGetProgramName()` instead of `effGetProgram()`. --- CHANGELOG.md | 1 + src/wine-host/bridges/vst2.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f1774ae..5bb59c9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -70,6 +70,7 @@ Versioning](https://semver.org/spec/v2.0.0.html). - Also fixed _DMG_ VST3 plugins freezing in **REAPER** when restoring multiple instances of the plugin at once while the FX window is open and the GUI is visible. +- Fixed the _PG-8X_ VST2 plugin freezing in **REAPER** when loading the plugin. - Fixed _Voxengo_ VST2 plugins in **Renoise** freezing when loading a project or when otherwise restoring plugin state. - Fixed logging traces in the VST2 audio processing functions causing diff --git a/src/wine-host/bridges/vst2.cpp b/src/wine-host/bridges/vst2.cpp index 03451f93..130f4f78 100644 --- a/src/wine-host/bridges/vst2.cpp +++ b/src/wine-host/bridges/vst2.cpp @@ -46,6 +46,9 @@ Vst2Bridge* current_bridge_instance = nullptr; * recursive mutexes on both functions so `effGetProgram()` _has_ to be * called on the same thread that is currently calling * `audioMasterUpdateDisplay()`. + * NOTE: Similarly, REAPER calls `effProgramName()` in response to + * `audioMasterUpdateDisplay()`, and PG-8X also requires that to be called + * from the same thread that called `audioMasterUpdateDisplay()`. */ static const std::set mutually_recursive_callbacks{ audioMasterUpdateDisplay}; @@ -61,7 +64,8 @@ static const std::set mutually_recursive_callbacks{ * just execute the function directly on the calling thread. See above for a * list of situations where this may be necessary. */ -static const std::set safe_mutually_recursive_requests{effGetProgram}; +static const std::set safe_mutually_recursive_requests{effGetProgram, + effGetProgramName}; /** * Opcodes that should always be handled on the main thread because they may