Repository navigation
test: distinguish Linux fixture termination from zombie reaping - #61
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.
Change
Linux process-tree timeout validation can fail after a descendant has terminated but remains an unreaped zombie: .NET's attached non-child HasExited uses kill(pid, 0), which still sees its PID entry. This was the sole failure in merged CI 38753576372. That run did not record procfs state, so the historic zombie explanation remains strongly supported rather than proven.
This test-only correction reads PID, parent PID, state, thread count and kernel start token from one procfs snapshot. It preserves exact ownership matching and accepts an owned terminal Z/X state only with one thread. A zombie leader with siblings, zero thread count and ordinary states remain active or unconfirmed; malformed records fail loudly. Observation stays inside the existing six-second outer test budget and failure output includes the last snapshot. Fixture cleanup uses the same distinction within its existing three-second bound.
The timeout helper, kill requests, execution/cleanup deadlines, captured output, pipe checks, benchmark code, allocation assertions, symbols/publication validation and workflow gates are unchanged. The live-orphan positive control remains. This distinguishes executable work from PID metadata awaiting an external reaper; it does not promise reaping of every descendant PID entry.
Validation
CI and limits
Exact-head CI 38757984928 completed successfully on
e49fe5ab6935f2fdd02ccd3357a84859347d40f0, attempt 1:No local timing benchmarks or nested real-build/package-launching checks were run for this follow-up; full CI supplied packaging, trimming, required Native AOT and existing smoke coverage. No performance acceptance claim. The draft remains open for human review and the working tree is clean.
Follow-up to merged PR #60, based on develop 1489dad and preserving #59 symbols fixes. Draft for human review; no merge, publication, workflow retry or machine/system setting changes. No tracking issue was created: automatic approval review rejected issue creation under the original no-issues boundary, and no tracker-write workaround was used.