codex: keep timer runtime on delete failure (#17380)

This commit is contained in:
Eric Traut
2026-04-12 14:00:05 -07:00
parent b6ab1b1e5f
commit 667d2a2d95
2 changed files with 3 additions and 17 deletions
+3 -13
View File
@@ -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<Self>) {
-4
View File
@@ -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();