From 1a7cf2d335fb6fd75da6b4321aac0a16809aed53 Mon Sep 17 00:00:00 2001 From: Giuliano Mega Date: Thu, 5 Feb 2026 11:33:23 -0300 Subject: [PATCH] fix: propagate callback cancellation (#1400) --- codex/stores/maintenance.nim | 3 ++- codex/utils/timer.nim | 2 +- tests/codex/utils/testtimer.nim | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/codex/stores/maintenance.nim b/codex/stores/maintenance.nim index 38486239..b2fece4d 100644 --- a/codex/stores/maintenance.nim +++ b/codex/stores/maintenance.nim @@ -100,12 +100,13 @@ proc runBlockCheck( trace "Cycle completed" proc start*(self: BlockMaintainer) = - proc onTimer(): Future[void] {.async: (raises: []).} = + proc onTimer(): Future[void] {.async: (raises: [CancelledError]).} = try: await self.runBlockCheck() except CancelledError as err: trace "Running block check in block maintenance timer callback cancelled: ", err = err.msg + raise err self.timer.start(onTimer, self.interval) diff --git a/codex/utils/timer.nim b/codex/utils/timer.nim index fc22dfd3..f12b1228 100644 --- a/codex/utils/timer.nim +++ b/codex/utils/timer.nim @@ -17,7 +17,7 @@ import pkg/chronos import ../logutils type - TimerCallback* = proc(): Future[void] {.async: (raises: []).} + TimerCallback* = proc(): Future[void] {.async: (raises: [CancelledError]).} Timer* = ref object of RootObj callback: TimerCallback interval: Duration diff --git a/tests/codex/utils/testtimer.nim b/tests/codex/utils/testtimer.nim index cf05df19..79b95e42 100644 --- a/tests/codex/utils/testtimer.nim +++ b/tests/codex/utils/testtimer.nim @@ -21,11 +21,11 @@ asyncchecksuite "Timer": var numbersState = 0 var lettersState = 'a' - proc numbersCallback(): Future[void] {.async: (raises: []).} = + proc numbersCallback(): Future[void] {.async: (raises: [CancelledError]).} = output &= $numbersState inc numbersState - proc lettersCallback(): Future[void] {.async: (raises: []).} = + proc lettersCallback(): Future[void] {.async: (raises: [CancelledError]).} = output &= $lettersState inc lettersState