Repository navigation
Check pluginval against a sanitized plugin - #110
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three times the Linux pluginval step has passed every test and then crashed while pluginval shut down, with glibc reporting heap corruption: in thread-local storage on 5 October, in the run loop on 24 October, and in
XCloseDisplayon the zoom pull request today. Each time a re-run was green. glibc only notices damage when memory is freed, so these crashes cannot say whose write did it, and each one cost a re-run and some doubt.I built the release branch as a VST3 with the address and undefined behaviour sanitizers across the plugin and JUCE, and ran pluginval against it ten times: six with the pinned seed, three with random seeds and one with leak checks on. Every run passed all 25 test groups with no sanitizer reports and no leaks. So the crash is pluginval and Xlib shutting down on the runner, not the plugin.
A weekly sanitized pluginval job
A new job, "pluginval, sanitized", builds the VST3 with the sanitizers and runs pluginval against it twice, with the pinned seed and with a random one, and fails on anything the sanitizers report. It stops at the first bad write, so if the plugin ever does damage memory, it names the line. It runs on the weekly schedule and when started by hand, since the sanitized build takes most of the hour.
A crash after SUCCESS passes with a warning on Linux
The Linux pluginval step now keeps its output. If pluginval exits with an error after printing
SUCCESS, and no test failed, the step passes and prints a warning that points at the stack. A failed test, or a crash beforeSUCCESS, still fails it. pluginval also starts its warnings with!!!, so the check looks for its actual failure markers.The fetch is shared
Both jobs need pluginval, so the fetch step moved unchanged into
.github/scripts/fetch_pluginval.sh, and the pinned version and the three checksums are written down once..gitattributesalready keeps.shfiles with LF endings on the Windows runner.What changes for contributors
How it was checked
xvfb-runandgdb. A clean run passes. A crash afterSUCCESSpasses with the warning, also when pluginval printed a warning first. A failed test and a crash beforeSUCCESSfail with their own exit codes.runblock passesbash -n, and prettier and the counts and structured data checks pass.Anything I am unsure about
How long the sanitized build takes on a runner. Locally it took about 15 minutes at three jobs, and the job has a 60 minute limit. I started it by hand on this branch to see before merging.