You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Three perry-runtime tests flake under parallel test runs (reproduce on unmodified main) #9197
Three perry-runtime lib tests fail intermittently when the suite runs in parallel (the default). They have cost four gate runs across three PRs today, each time looking like the PR's fault:
gc::roots::stack_maps::decode_tests::tests::discovers_a_map_from_a_later_loaded_shared_object — the consistent offender; it dlopens a shared object
The failing set changes between runs of the same commit. Two gate runs on one commit reported 2818 passed; 2 failed each, with a different second test.
All three pass single-threaded, on the branch and on origin/main: cargo test --release -p perry-runtime --lib -- --test-threads=1 <names> → 3 passed.
Unmodified origin/main reproduces it. Three parallel runs of cargo test --release -p perry-runtime --lib on main: runs 1 and 2 green, run 3 2819 passed; 1 failed on discovers_a_map_from_a_later_loaded_shared_object.
Load is not the trigger. It first appeared with the box at load 12–15, but also flaked at load 1.0, so these are racy in parallel rather than merely timing-sensitive under contention.
The failure is indistinguishable at a glance from a real regression, so every occurrence costs someone a bisect-or-believe decision — and the cheap resolution ("just re-run") is exactly the habit that hides a genuine flaky-looking regression later.
Shapes worth considering: a shared-object load and a symbol-registry/IC cache are both process-global, so parallel tests contend on state that is not per-test. Serializing these three (a mutex, serial_test, or a --test-threads=1 lane for the modules that touch process-global registries) would remove the ambiguity.
Fixed by #9767, which landed on main via merge train #9798. The train was merged as its own branch, so the Fixes #9197 keyword in #9767 never fired — closing manually. Verified the fix is on main by patch-id (git cherry), not just by the PR being closed.
Activity
proggeramlug commentedon Sep 5, 2026
Fixed by #9767, which landed on
mainvia merge train #9798. The train was merged as its own branch, so theFixes #9197keyword in #9767 never fired — closing manually. Verified the fix is onmainby patch-id (git cherry), not just by the PR being closed.