From d61d6c0872ad956b05df8bbd090a1f7074df3eaa Mon Sep 17 00:00:00 2001 From: pedrocarlo Date: Wed, 20 Aug 2025 01:26:19 -0300 Subject: [PATCH] when `run_once` fails we abort the current IOCompletions --- core/lib.rs | 3 +++ core/types.rs | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/core/lib.rs b/core/lib.rs index e1e5c6ae4..c7c4dfa04 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -2048,6 +2048,9 @@ impl Statement { return res; } if res.is_err() { + if let Some(io) = &self.state.io_completions { + io.abort(); + } let state = self.program.connection.transaction_state.get(); if let TransactionState::Write { .. } = state { let end_tx_res = self.pager.end_tx(true, &self.program.connection, true)?; diff --git a/core/types.rs b/core/types.rs index 5a4caf2b8..00fdbe741 100644 --- a/core/types.rs +++ b/core/types.rs @@ -2494,6 +2494,14 @@ impl IOCompletions { IOCompletions::Many(completions) => completions.iter().all(|c| c.finished()), } } + + /// Send abort signal to completions + pub fn abort(&self) { + match self { + IOCompletions::Single(c) => c.abort(), + IOCompletions::Many(completions) => completions.iter().for_each(|c| c.abort()), + } + } } #[derive(Debug)]