Repository navigation
Conversation
I pushed 4984a32 on top of this PR. It's a small simplification: the JS I also looked at moving Checks on macOS: |
…oth times The EBADF path only changes which waiters are due; a closed descriptor stays closed between the two filter passes, so the original split of io.waits needs no rewrite. -13 tokens.
4984a32 to
adb45dd
Compare
|
Thanks. I preserved your two-filter simplification and rebased the PR onto current main The compiler is now 64,000 / 64,000 ttok and Fresh Linux proof from a compiled CLI of the rebased head:
I updated the PR body to remove the obsolete single-partition description and separate the fresh rebase proof from the older ASan/34-consumer evidence. No new macOS or distributed-mini run is claimed. |
Current-head review qualification
Head
adb45dd5is rebased on current maind71f42eeand preserves the maintainer's two-filter simplification. The selector invariant comment is shorter, but still names macOS FIFO EOF and_DARWIN_UNLIMITED_SELECT; no executable policy or cap was altered. The current repository gate passes 54 / 54.Fresh Linux installed-CLI smoke:
select_badfdprints exactlyEBADFthencontinued, exit 0, in emitted C, Bun JS and interpreted IO. The valid unwritten descriptor remains parked.select_eintrpasses all three paths;spawn_sleep,sleep_timer,udp_loopbackandtcp_loopbackpass C and Bun against their existing expected outputs. No new macOS or distributed-mini run is claimed. The verification below that mentions ASan and 34 consumer/backend runs is historical qualification from the original head, not a rerun of those lanes on this rebase.Fixes #1455.
Change
EBADFin C and Bun by checking parked descriptors withF_GETFDon that error path only. Invalid descriptors resume their normal effect handlers; valid descriptors remain parked unless their deadlines expire.EINTRretries and fatal handling of other selector errors. No selector-backend replacement, new retry policy, or normal-path descriptor validation.EBADF, before callbacks execute.select_badfd: a real closed UDP descriptor must produceFail(EBADF), a separate valid unwritten pipe must not wake, and a later timer must complete. The idle pipe is terminated by explicitIO.die, following the existingselect_eintrconvention.Actual verification
bend: the poller failed; no expected result is produced.EBADF\ncontinued\n, exit 0, in C and Bun. The C consumer also passes ASan + UBSan with four workers; no sanitizer diagnostics.Ready(Fail(EBADF)), rather thanWait, in Bun and ASan + UBSan native C with four workers.select, timer order, spawned computations, TCP/UDP readiness, byte payloads, EOF, send/receive deadlines, backlog/timer fairness, and channel operations.comp.ts: 64,000 / 64,000 ttok on rebased headadb45dd5. No cap, gate, allowlist, protected checker, or compiler-splitting change.Boundaries
This is controlled real-OS error injection through a foreign fill, not a valid closed-alias program under affine
Socketownership. Ordinary valid waiters and signal handling are exercised separately above.Linux x86_64 local verification only. macOS, GPU/mini-cluster gates, and hosted CI are not claimed. Socket readiness uses Bun FFI; no unrelated Node FFI port is included. Draft #1442 remains the separate unqualified #1250 indexing/budget proposal; this patch does not include that redesign.
AI-assisted: omp / GPT-6.1 Sol; working alone without subagents.