Fix native process descriptor test reaper race - #286
Draft
pcarrier wants to merge 9 commits into
Draft
Conversation
Add the desktop process bridge, media and notification protocol support, live client controls, and the accompanying iPad tray and workspace refinements.
Preserve macOS dead-key composition, resolve relative Markdown links, and keep kicked mux clients disconnected.
## Summary - implement feature bit 13 and the native non-PTY process packet family, plus transport-neutral Rust command/child/list/watch helpers - give every started child a public, server-boot-scoped `process_ref`; apny process-capable client can list live children, concurrently watch future output, and issue lifecycle controls without a bearer/adoption token - inherit the complete server process environment, with client-supplied entries overriding matching inherited keys; there is no `CLEAR_ENV` mode - provide independent per-watch output credit, an explicit single stdin-writer request, public retained results for detachable children, and owner-bound lifetime for ordinary children - enforce endpoint, generation, watcher, request, stream-window, and process-outbox limits; close stalled/overflowed endpoints instead of silently dropping committed process frames - contain Unix children in process groups and Windows children in kill-on-close jobs, with residual-tree cleanup, shared-reaper integration, descriptor hygiene, bounded shutdown, and Windows lifecycle CI - integrate feature negotiation, disabled-family replies, fair bulk scheduling, `BLIT_PROCESS=0` / `--no-processes`, startup policy settings, and operator/RFC documentation There is intentionally no cross-client process confidentiality or control boundary: process-capable clients can discover, watch, and control one another's native children. The low-level packet/accounting API is included; integrated native-client and extension convenience SDKs remain follow-up work. ## Validation - `cargo test -p blit-server --lib` — 484 passed - `cargo test -p blit-remote --lib` — 240 passed - `cargo test -p blit-cli --bin blit` — 93 passed - `./bin/lint --check` — Rust formatting, Prettier, and the full clippy matrix passed - focused post-rebase process suite — 33 server and 12 remote tests passed - independent lifecycle/resource and wire/API review — no remaining actionable findings
Coverage
|
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.
Summary
wait_childcleanup order: deregister after a successful direct wait, or consume the parked status after a wait errorRoot cause
The late-open file-descriptor regression unconditionally deregistered its child before inspecting
Child::wait(). Under full-suite contention, the shared reaper could collect the child first and park status 0; deregistration then deleted that status, so the test falsely reported descriptor inheritance.This was test bookkeeping, not a production descriptor leak. The production wait path already used the correct ordering.
Follow-up to #285.
Validation
cargo test -p blit-server --lib descriptors_opened_after_command_construction_are_not_inheritedcargo test -p blit-server --lib— 484 passedcargo fmt -p blit-server -- --checkcargo clippy -p blit-server --lib -- -D warningsgit diff --check