From 5701a576ccc3eb93420334103a9ae66f4c096450 Mon Sep 17 00:00:00 2001 From: felixxia-oai Date: Fri, 18 Sep 2026 15:57:46 +0000 Subject: [PATCH] Retry busy executable launches in packaged daemon tests (#46524) ## Why Freshly copied executables can briefly remain busy on Linux CI workers, causing packaged daemon tests to fail at launch. ## What changed Retry the command launch in `packaged_daemon_launch` up to twice on `std::io::ErrorKind::ExecutableFileBusy`, waiting 10 ms between attempts. Other launch errors still propagate immediately. GitOrigin-RevId: afb6213173a7ae4bcfe2e1e6fab6ced65ab5bf77 --- codex-rs/cli/tests/app_server_daemon.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/codex-rs/cli/tests/app_server_daemon.rs b/codex-rs/cli/tests/app_server_daemon.rs index 6ac6de389e..74151b41d8 100644 --- a/codex-rs/cli/tests/app_server_daemon.rs +++ b/codex-rs/cli/tests/app_server_daemon.rs @@ -524,10 +524,22 @@ fn packaged_daemon_launch(action: &str, initial: InitialDaemon) -> Result<()> { br#"{"shutdownGraceSeconds":0}"#, )?; let cli_before = daemon.codex.canonicalize()?; - let result = daemon - .command() - .args(["app-server", "daemon", action]) - .output()?; + let mut command = daemon.command(); + command.args(["app-server", "daemon", action]); + // A freshly copied executable can briefly remain busy on Linux CI workers. + let mut retries = 0; + let result = loop { + let result = command.output(); + if !result + .as_ref() + .is_err_and(|error| error.kind() == std::io::ErrorKind::ExecutableFileBusy) + || retries == 2 + { + break result?; + } + retries += 1; + std::thread::sleep(Duration::from_millis(/*millis*/ 10)); + }; ensure!( result.status.success(), "{}",