Fix Downgrade (QA): remove PATH solve from precompile workload (intermittent libpath50 segfault)#66
Merged
ChrisRackauckas merged 1 commit intoJun 21, 2026
Conversation
The Downgrade (QA) job fails on a from-scratch precompile of the package with a segfault in libpath50 (PATHSolver's native library), surfacing as "Output_Printf at libpath50.so" / "signal (11): Segmentation fault" in expression starting at src/precompilation.jl. The crash is intermittent: locally on Julia 1.10 it reproduces roughly 1 in 20 cold precompiles, and every Downgrade run does a cold precompile. Invoking the PATH native solver inside the precompile worker is the only operation that loads/calls libpath50 during precompilation, and native C library calls are not what precompilation caches. Removing the PATH solve from the workload makes precompilation deterministic with no loss of cached coverage. (InteriorPointMethod is already excluded from the workload for similar stability reasons.) Verified locally on Julia 1.10.11 with the downgrade-resolved versions (PATHSolver 1.4.0, ForwardDiff 1.0.1, Zygote 0.7.5): 8/8 cold-cache QA runs (Aqua + ExplicitImports) now pass with no segfault, and the package still precompiles cleanly at latest versions. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Problem
The
Downgrade (QA)job onmainis red. It fails during a from-scratch precompilation of the package with a segfault in PATHSolver's native library (libpath50):Because precompilation aborts, the QA testsets (
Aqua,ExplicitImports) error before they run.The previous Downgrade fix (#64) resolved the earlier
Unsatisfiable requirementsresolution failures in all three groups; Core and Applications are now green. QA was the last remaining red, and its failure is a different cause: this precompile segfault.Root cause
The
@compile_workloadends by actually solving an MCP withPATHSolverAlgorithm(), which calls into the PATH native C library (libpath50.so) from inside the precompile worker process. That native call segfaults intermittently. Reproduced locally on Julia 1.10.11 with the downgrade-resolved versions (PATHSolver 1.4.0, ForwardDiff 1.0.1, Zygote 0.7.5): roughly 1 in ~20 cold-cache precompiles crashes with the identical signature (signal (11): Segmentation faultinprecompilation.jl,Output_Printf at libpath50.so). Every Downgrade run does a cold precompile, so it hits this regularly.It is not a Julia-code bug and not a resolution problem — it is the PATH native library being unsafe to invoke inside the precompile worker. (
test/aqua.jlalready disablespersistent_taskswith the note "PATHSolver precompile workload triggers persistent task detection", andInteriorPointMethodis already excluded from the workload for stability.)Fix
Remove the PATH solve from the precompile workload. Invoking the PATH solver is the only operation that loads/calls
libpath50during precompilation, and native C-library calls are not what precompilation caches in the first place — so excluding it loses no meaningful cached coverage while making precompilation deterministic.Local verification (Julia 1.10.11, downgrade-resolved versions)
Aqua: 3 pass / 1 broken-as-declared;ExplicitImports: 2 pass), zero segfaults.Please ignore until reviewed by @ChrisRackauckas
Companion CI fix: The
CUDA Core/CUDA Applicationsreds seen onmainand on this branch are a separate, infrastructure-level failure — the two GPU matrix jobs race on the shared self-hosted~/.gitconfiginsidecodecov-action'ssafe.directorysetup (tests pass; the post-step exits 255). That is fixed in #67, not here. This PR remains focused on theDowngrade (QA)precompile segfault.