CI: slopsmith-vst-host (sandbox-e2e's own CMake project) and macOS's
slopsmith-vst-scan compile VSTHost.cpp without LifecycleExecutor.cpp and
failed to link pinPluginModuleForever. Move the pin to a header-only
PluginModulePin.h so every target that compiles VSTHost.cpp gets it with
no extra source-list entry; drop the now-unneeded LifecycleExecutor.cpp
from VST_HOST_SOURCES.
CodeRabbit review:
- Pin by full module path, not base name: enumerate loaded modules
(PSAPI_VERSION=2 K32 exports, no psapi.lib) and pin every one whose
path starts with the plugin identifier — two plugins sharing a DLL base
name can no longer pin the wrong module, and the bundle-dir identifier
now matches the inner Contents/<arch>/ file it actually loaded.
- Ops are exception-safe: a throwing op logs and still signals its
waiter instead of leaving an unbounded caller blocked forever.
- Documented why the message-thread inline path is intentional (nested
submissions are part of the outer op; dispatch-and-wait on the message
thread would self-deadlock; FIFO is the contract between off-thread
submitters).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>