Also handle mutual recursion in *::getState()

VST3 plugins could freeze in REAPER when the plugin sends
`IComponentHandler::performEdit()` followed by
`IPlugFrame::resizeView()` when REAPER simultaneously tries to call
`*::getState()`. Here `*::getState()` gets called from the GUI thread,
while `IPlugFrame::resizeView()` has to be handled on REAPER's GUI
thread, resulting in a deadlock unless we use the plugin-side mutual
recursion mechanism.

I've seen this cause issues with PSPaudioware InfiniStrip.
This commit is contained in:
Robbert van der Helm
2021-05-02 16:34:32 +02:00
parent a83ff5a36a
commit 62efc1c273
3 changed files with 47 additions and 21 deletions
+3
View File
@@ -114,6 +114,9 @@ Versioning](https://semver.org/spec/v2.0.0.html).
- Fixed _UVI Plugsound Free_ crashing during initialization.
- Fixed potential freezing when loading a VST3 preset that tries to resize an
open editor window.
- Fixed another potential freezing issue in REAPER that could happen when the
when the plugin resizes itself while sending a parameter change to the host,
if REAPER's 'disable saving full plug-in state' is not disabled.
- Because of the new transport information prefetching, the excessive DSP usage
in _SWAM Cello_ is now been fixed without requiring any manual compatibility
options.