From e296ae30c84bdd1f0b12c50ab551ed080f8a815c Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Sat, 20 Jan 2024 16:56:57 +0100 Subject: [PATCH] asyncraises for threadsync (#495) * asyncraises for threadsync * missing bracket * missing exception --- chronos/internal/asyncfutures.nim | 2 +- chronos/threadsync.nim | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/chronos/internal/asyncfutures.nim b/chronos/internal/asyncfutures.nim index 496a776..1a2be75 100644 --- a/chronos/internal/asyncfutures.nim +++ b/chronos/internal/asyncfutures.nim @@ -1553,7 +1553,7 @@ when defined(windows): proc waitForSingleObject*(handle: HANDLE, timeout: Duration): Future[WaitableResult] {. - raises: [].} = + async: (raises: [AsyncError, CancelledError], raw: true).} = ## Waits until the specified object is in the signaled state or the ## time-out interval elapses. WaitForSingleObject() for asynchronous world. let flags = WT_EXECUTEONLYONCE diff --git a/chronos/threadsync.nim b/chronos/threadsync.nim index bbff18b..f922c12 100644 --- a/chronos/threadsync.nim +++ b/chronos/threadsync.nim @@ -272,7 +272,8 @@ proc waitSync*(signal: ThreadSignalPtr, else: return ok(true) -proc fire*(signal: ThreadSignalPtr): Future[void] = +proc fire*(signal: ThreadSignalPtr): Future[void] {. + async: (raises: [AsyncError, CancelledError], raw: true).} = ## Set state of ``signal`` to signaled in asynchronous way. var retFuture = newFuture[void]("asyncthreadsignal.fire") when defined(windows): @@ -356,14 +357,17 @@ proc fire*(signal: ThreadSignalPtr): Future[void] = retFuture when defined(windows): - proc wait*(signal: ThreadSignalPtr) {.async.} = + proc wait*(signal: ThreadSignalPtr) {. + async: (raises: [AsyncError, CancelledError]).} = let handle = signal[].event let res = await waitForSingleObject(handle, InfiniteDuration) # There should be no other response, because we use `InfiniteDuration`. doAssert(res == WaitableResult.Ok) else: - proc wait*(signal: ThreadSignalPtr): Future[void] = - var retFuture = newFuture[void]("asyncthreadsignal.wait") + proc wait*(signal: ThreadSignalPtr): Future[void] {. + async: (raises: [AsyncError, CancelledError], raw: true).} = + let retFuture = Future[void].Raising([AsyncError, CancelledError]).init( + "asyncthreadsignal.wait") var data = 1'u64 let eventFd = when defined(linux):