From 667d2a2d95289e90af5401579cd2622243421498 Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Sat, 11 Apr 2026 00:47:16 -0700 Subject: [PATCH] codex: keep timer runtime on delete failure (#17380) --- codex-rs/core/src/codex/timer_runtime.rs | 16 +++------------- codex-rs/core/src/timers.rs | 4 ---- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/codex-rs/core/src/codex/timer_runtime.rs b/codex-rs/core/src/codex/timer_runtime.rs index fa2b109c0f..954be52c8d 100644 --- a/codex-rs/core/src/codex/timer_runtime.rs +++ b/codex-rs/core/src/codex/timer_runtime.rs @@ -180,30 +180,20 @@ impl Session { let state_db = self.timer_state_db().await?; self.start_timer_db_sync_task(state_db.clone()); - let runtime = self.timers.lock().await.remove_timer(id); let deleted = match state_db .delete_thread_timer(&self.thread_id_string(), id) .await { Ok(deleted) => deleted, - Err(err) => { - if let Some(runtime) = runtime { - self.timers.lock().await.restore_runtime(runtime); - } - return Err(format!("failed to delete timer from sqlite: {err}")); - } + Err(err) => return Err(format!("failed to delete timer from sqlite: {err}")), }; + let runtime = self.timers.lock().await.remove_timer(id); let Some(runtime) = runtime else { return Ok(deleted); }; - if !deleted { - TimersState::cancel_runtime(&runtime); - self.emit_timer_updated_notification().await; - return Ok(false); - } TimersState::cancel_runtime(&runtime); self.emit_timer_updated_notification().await; - Ok(true) + Ok(deleted) } pub(crate) async fn maybe_start_pending_timer(self: &Arc) { diff --git a/codex-rs/core/src/timers.rs b/codex-rs/core/src/timers.rs index 6be08b78bd..fa7b6e4474 100644 --- a/codex-rs/core/src/timers.rs +++ b/codex-rs/core/src/timers.rs @@ -306,10 +306,6 @@ impl TimersState { self.timers.remove(id) } - pub(crate) fn restore_runtime(&mut self, runtime: TimerRuntime) { - self.timers.insert(runtime.timer.id.clone(), runtime); - } - pub(crate) fn cancel_runtime(runtime: &TimerRuntime) { if let Some(cancel) = runtime.timer_cancel.as_ref() { cancel.cancel();