Pluginval asserts MessageManager via ValidatorChildProcess

I’m getting a ton of asserts from juce_VST3PluginFormat.cpp now because of the ValidatorChildProcess used by PluginVal.

They’re in prepareToPlay, setStateInformation, getStateInformation.
All of the comments in the code say that VST3 expects all of these functions to be called from the Message thread, but PluginVal is calling them from a background thread.

this is with pluginval (tag: 0.3.0)

@dave96 recently @reuk mentioned that he did a ton of work in the VST3 juce wrappers. Do you know if these changes were in juce v6.1.0 which is used with PluginVal?

The same asserts fire when using Global Paths in ProJucer for PluginVal instead of the version of JUCE that pluginval’s submodule is set to. This is with the latest commit to the JUCE develop branch (462c3a8)

None of these asserts are triggered if I uncheck ‘Validate In Process’ from the Options menu in PluginVal.

Hmm, good point. Are you manually attaching the debugger to the child process it spawns for it to be triggering those assertions?

TBH, I’ve thought of a better architecture where rather than that IPC connection, the same binary is just run with a set of CLI arguments and the output passed back. But I don’t really have time to re-write all that just now…

I am setting the Scheme in Xcode to run PluginVal whenever I “run” the project.
Xcode is automatically attaching the debugger to PluginVal.

I just thought you had to manually attach to processes that have been forked from the main process.
Perhaps this is something they’ve added? What version of Xcode is it?

I’m using Xcode v12.4 (12D4e) on MacOS Catalina 10.15.7.

I think you misread what I said.
None of these asserts are triggered if I DO NOT USE the ‘Validate In Process’ option.

If I use the “Validate In Process” option, then the asserts are triggered because those functions (prepareToPlay, setStateInformation) are called from a background thread.