From 9ed7969add86a470d43d756563362ba48ff4ab49 Mon Sep 17 00:00:00 2001 From: starr-openai Date: Fri, 8 May 2026 21:08:37 -0700 Subject: [PATCH] Wait for stale startup prewarm abort before MCP swap Co-authored-by: Codex --- codex-rs/core/src/session/mcp.rs | 2 +- codex-rs/core/src/session_startup_prewarm.rs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/codex-rs/core/src/session/mcp.rs b/codex-rs/core/src/session/mcp.rs index 7b9599c8d3..6604af7daa 100644 --- a/codex-rs/core/src/session/mcp.rs +++ b/codex-rs/core/src/session/mcp.rs @@ -350,7 +350,7 @@ impl Session { // The prewarm was built with the stale manager and can hold a read // lock while resolving tools. Abort it before swapping managers so // an MCP refresh cannot block turn startup behind stale work. - startup_prewarm.abort(); + startup_prewarm.abort_and_wait().await; } let mut old_manager = { diff --git a/codex-rs/core/src/session_startup_prewarm.rs b/codex-rs/core/src/session_startup_prewarm.rs index 5302ec499f..0e6e0644e3 100644 --- a/codex-rs/core/src/session_startup_prewarm.rs +++ b/codex-rs/core/src/session_startup_prewarm.rs @@ -47,8 +47,9 @@ impl SessionStartupPrewarmHandle { } } - pub(crate) fn abort(self) { + pub(crate) async fn abort_and_wait(self) { self.task.abort(); + let _ = self.task.await; } async fn resolve(