Repository navigation
A signal is retried; a failed check is not - #116
Merged
Merged
Conversation
The QGIS 4.2 job exited 139 on the merge of a documentation-only PR — one markdown file. The same commit's own PR run had passed that job minutes earlier, and a rerun of the merge commit passed with nothing changed. So the repository's code is not the variable. It is the second time. Both were on the 4.2 image only, both at a different place (once `corrupted size vs. prev_size`, once a clean SIGSEGV right after the Rule-based section header), and both passed on a rerun. NOT DIAGNOSED, AND NOT PRETENDED OTHERWISE. The obvious suspect is the borrowed-pointer trap already recorded in notes_for_future: a symbol taken out of a rule tree and read after its temporary is gone segfaults exactly like this. So the harness's own rule builder was run 300 times on 4.2 with a collection between every round — plain, ELSE, scale-limited and nested trees, built, read, applied back and read again — and did not crash once. An earlier occurrence survived 9 full runs under GC stress. There is no fix to make yet. Two things that help anyway: faulthandler is enabled in all three QGIS scripts, so a signal prints the Python stack from inside the handler. The standing complaint about this class of crash is that it arrives as nothing but "Segmentation fault (core dumped)" and leaves you guessing which of 349 checks was running. Next time it will say. And CI now distinguishes a crash from a verdict. Below exit 128 the step fails immediately, so a broken round trip still stops the build on the first try; 128 or above it prints a ::warning:: and runs the script once more. The flake stays visible in the run summary instead of being silently swallowed. 349 + 569 checks and the coverage report pass on qgis:ltr and qgis:4.2 with faulthandler enabled. Signed-off-by: Koffi Dodji Noumonvi <noumonvikoffidodji@hotmail.fr>
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.
The
QGIS 4.2 (real PyQGIS)job exited 139 on the merge of #115 — a documentation-only PR,one markdown file. The same commit's own PR run had passed that job minutes earlier, and
a rerun of the merge commit passed
with nothing changed. The repository's code is not the variable.
It is the second occurrence. Both on the 4.2 image only, never
ltr; both at a differentplace (once
corrupted size vs. prev_size, once a cleanSegmentation fault (core dumped)immediately after the
Rule-basedsection header, before its first check printed); both passing ona rerun.
Not diagnosed, and not pretended otherwise
The obvious suspect is the borrowed-pointer trap already recorded in
notes_for_future.md: asymbol taken out of a rule tree and read after its temporary is gone segfaults exactly like this.
So the harness's own rule builder was run 300 times on 4.2 with
gc.collect()between everyround — plain, ELSE, scale-limited and nested rule trees, built, read, applied back and read again.
No crash. An earlier occurrence survived 9 full runs under GC stress.
There is no fix to make yet. Two things that help anyway:
1. The next crash will say where it was
faulthandler.enable()intest_real_qgis.py,test_roundtrip_matrix.pyandcoverage_report.py. The standing complaint about this class of failure — written down twice inthe repo — is that it arrives as nothing but
Segmentation fault (core dumped)and leaves youguessing which of 349 checks was running. Now the signal handler prints the Python stack.
2. CI distinguishes a crash from a verdict
::warning::in the run summary, then one more attemptA genuinely broken round trip still stops the build on the first try. Only a native crash gets the
second run, and it stays visible rather than being silently swallowed. Verified against exit codes
0, 1, 139 and 134.
Nothing here touches the plugin
No file under
geodeploy_qgis/changed, so 0.7.2 does not need re-uploading anywhere. This isthe harness and the workflow.
349 + 569 checks and the coverage report pass on qgis:ltr and qgis:4.2 with faulthandler enabled.