From 45e1742030ea53b519f8c6250464afe84964f6ca Mon Sep 17 00:00:00 2001 From: jif-oai Date: Thu, 23 Apr 2026 16:50:17 +0200 Subject: [PATCH] exec-server: wait for close after observed exit (#19130) ## Why Windows CI can flake in `server::handler::tests::output_and_exit_are_retained_after_notification_receiver_closes` after a process has exited but before both output streams have closed. `exec/read` returned immediately whenever `exited` was true, so callers that had already observed the exit event could spin instead of long-polling for the later `closed` state. ## What Changed - Keep returning immediately when a terminal exit event is newly observable. - Allow later reads, after the caller has advanced past that event, to wait for `closed` or new output until `wait_ms` expires. ## Verification - CI pending. --- codex-rs/exec-server/src/local_process.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/codex-rs/exec-server/src/local_process.rs b/codex-rs/exec-server/src/local_process.rs index aa88e37fd..6446c3650 100644 --- a/codex-rs/exec-server/src/local_process.rs +++ b/codex-rs/exec-server/src/local_process.rs @@ -323,8 +323,11 @@ impl LocalProcess { ) }; + let has_new_terminal_event = + response.exited && after_seq < response.next_seq.saturating_sub(1); if !response.chunks.is_empty() - || response.exited + || response.closed + || has_new_terminal_event || tokio::time::Instant::now() >= deadline { let _total_bytes: usize = response