From 75e6b3c3377e79c63d465a6d544119f3ec54db19 Mon Sep 17 00:00:00 2001 From: pakrym-oai Date: Thu, 21 May 2026 17:43:27 -0700 Subject: [PATCH] Clear pending turn start on interrupt --- codex-rs/core/src/session/input_queue.rs | 6 ++++++ codex-rs/core/src/session/mod.rs | 1 + 2 files changed, 7 insertions(+) diff --git a/codex-rs/core/src/session/input_queue.rs b/codex-rs/core/src/session/input_queue.rs index 56cdb131e4..13873e3ebd 100644 --- a/codex-rs/core/src/session/input_queue.rs +++ b/codex-rs/core/src/session/input_queue.rs @@ -161,6 +161,12 @@ impl InputQueue { .extend(input.into_iter().map(PendingInput::new)); } + pub(crate) async fn clear_start_turn(&self) { + for pending_input in &mut self.state.lock().await.turn_pending_input { + pending_input.start_turn = false; + } + } + #[expect( clippy::await_holding_invalid_type, reason = "active turn checks and turn state updates must remain atomic" diff --git a/codex-rs/core/src/session/mod.rs b/codex-rs/core/src/session/mod.rs index 8ce5d629d5..e803cb6554 100644 --- a/codex-rs/core/src/session/mod.rs +++ b/codex-rs/core/src/session/mod.rs @@ -3229,6 +3229,7 @@ impl Session { pub async fn interrupt_task(self: &Arc) { info!("interrupt received: abort current task, if any"); let had_active_turn = self.active_turn.lock().await.is_some(); + self.input_queue.clear_start_turn().await; self.abort_all_tasks(TurnAbortReason::Interrupted).await; if !had_active_turn { self.cancel_mcp_startup().await;