mirror of
https://github.com/storytold/soundcraft.git
synced 2026-10-29 13:06:49 -06:00
Testing on macOS showed that the exit-handler fallback comes too late for a plugin that has been used: with HALion Sonic inserted on a track, its bundleExit segfaults, and both the app (on quit) and soundcraft-cli (after a bounce) exited with 139. A plain scan was fine. Exit handlers run in reverse order of registration, so state the plugin set up while in use is presumably torn down before the host's handler runs. soundcraft_vst3_host::shutdown() runs the module exits up front, and soundcraft_engine::shutdown_plugin_hosts() calls it. The app calls that once the event loop has returned (the player and its plugin instances are gone by then), and the CLI once its subcommand has. The exit handler stays as the fallback for other exits, such as test binaries. The fixture can now set up state lazily the way such plugins do (VST3_FIXTURE_LATE_STATE), and module_exit_shutdown checks both sides in child processes: with shutdown() the exit is clean, with only the exit handler the fixture reports the late teardown. Contract violations now end the process with status 3 instead of an abort, so that expected failure leaves no crash report. Refs #16 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>