Repository navigation
fix(spawn): publish owned subprocess completion before retirement checks - #147
Merged
Merged
Conversation
Capture ready subprocess owners before tasks, publish terminal state afterward, and drain only their owned pipes while preserving global phase order. Count extra stdio pipes for child close and preserve descriptor exhaustion behavior. Add a Node-qualified retirement regression and bind HTTP/2 conformance fixtures to their client address.
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.
After a blocked I/O callback outlasts a retirement deadline, the kernel may already have completed a child and its pipes while a deferred observer still sees stale completion state. This publishes owned subprocess completion before that observer without polling unrelated I/O or moving global event-loop phases.
Supersedes #142 by publishing only owned subprocess completion while preserving global phase order; #142 remains open for the coordinator.
The process-only kqueue/epoll snapshot retains ready owners before task dispatch and publishes them afterward. Existing readers deliver trailing bytes and real EOF; EAGAIN is never synthetic EOF. Extra stdio pipes count toward child close. The secondary descriptor closes when empty, stays above standard fds, and preserves the primary watch if additional watcher resources are exhausted.
HTTP/2 fixtures now bind to their IPv4 clients' address, and the stale-fd test selects the actual stdout socket rather than Darwin's FIFO-shaped kqueue descriptor. Assertions, deadlines, timeouts and skip conditions are unchanged.
Validation
Exact-head Linux/Darwin CI is green (27/27 and 21/21 report rows). Exact-head Windows CI is green for x64 and ARM64 builds, smoke and 31/31 compatibility rows each. Native artifact commit files/checksums match this head; the CI-built Darwin executable also passes the original consumer retirement fixture. Windows dispatch was a tagless dry run and Publish was skipped.
Manual comparisons retain one matching baseline failure per platform: native-Node TLS session resumption on Darwin, and an empty SHELL in the curated Linux environment. Main additionally fails the new regression. No failure was filtered or retried into a passing result.
Earlier failures and corrections are retained. An early Darwin HTTP2 run had 21 timeouts on a shared listener without listener-identity tracing, so its exact cause remains unproven. Controlled probes reproduced overlapping IPv4/IPv6 listeners; fresh main and candidate each passed all 84 original unchanged cases. No HTTP2 runtime workaround or tolerance change is included.
Related upstream work checked: oven-sh#33614, oven-sh#43888 and oven-sh#37869. None supplies this process-only undispatched-readiness mechanism; their broader scheduling or synthetic-EOF behavior is not imported.
Ready for coordinator review; intentionally unmerged. No release, tag, runtime-pin update or live/Team Gateway operation was performed.