9387bf929c
The #94248 native half. A delegation deadline abandons the child's daemon worker while it is typically parked inside an in-flight OpenSSL read (Codex Responses stream / httpx). PR #90889's deferred close (cherry-picked here, authorship preserved) stops the timeout thread from closing the child under the running future — but the deferred close only fires once the worker unwinds, and a worker blocked in ssl.read never unwinds on its own: the cooperative interrupt cannot reach a thread inside OpenSSL, so the child's SessionDB, httpx pools, and subprocesses stayed pinned until process exit, and any path that still hard-closed the transport released FDs under a live SSL BIO (the #29507/#67142/#70773 native-corruption family; SIGSEGV 17-72ms after "Subagent N timed out" on macOS arm64). Fix — bounded drain after deferral: - AIAgent._drain_transports_after_abandonment(): shutdown()-only sweep of the shared client's pooled sockets (force_close_tcp_sockets — FD release stays with the owning worker), abort+poison of the cached per-request openai/anthropic wire clients, Codex app-server request_interrupt(), and the inline _active_request_abort hook. Never client.close(), never socket.close(). - delegate timeout path: after registering the deferred-close callback, run one immediate drain plus one 5s re-sweep (covers a connection opened between the interrupt and the first sweep). The settled read (EOF/EPIPE) lets the worker unwind, which triggers the deferred close on the worker's own thread — the only safe FD-release boundary. A worker that still never settles retains its resources rather than risking a cross-thread close. Live repro (Linux, real TLS server subprocess + real httpx client blocked in OpenSSL read at the deadline + real SessionDB): before — child.close() ran on the timeout thread with in_flight_ssl_read=True (client FDs released under the live read; #94736 self-heal WARNING fired on the worker's unwind flush); after — drain settles the read in ~1ms, worker unwinds, close runs on the worker thread with in_flight_ssl_read=False. Not live-tested on macOS arm64 (no macOS runner); the fix is platform-neutral teardown ordering proven on Linux. Closes #94248