fix awaitThreadResult

This commit is contained in:
Jaremy Creechley 2024-05-18 18:12:50 +03:00
parent 54edcb1ce7
commit a96ea80148
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
2 changed files with 6 additions and 9 deletions

View File

@ -52,6 +52,10 @@ proc prove*[H](
without signal =? ThreadSignalPtr.new().mapFailure, err:
return failure(err)
defer:
let sigRes = signal.close()
if sigRes.isErr:
raise (ref Defect)(msg: sigRes.error())
let args = ProveTaskArgs(signal: signal, params: self.params)
proc spawnTask(): Flowvar[Result[CircomProof, string]] =
@ -59,8 +63,7 @@ proc prove*[H](
let flowvar = spawnTask()
without taskRes =? await awaitThreadResult(signal, flowvar), err:
let res: ?!CircomProof = failure(err)
return res
return failure(err)
without proof =? taskRes.mapFailure, err:
let res: ?!CircomProof = failure(err)
@ -69,6 +72,7 @@ proc prove*[H](
let pf: CircomProof = proof
success(pf)
proc verify*[H](
self: AsyncCircomCompat, proof: CircomProof, inputs: ProofInputs[H]
): Future[?!bool] {.async.} =

View File

@ -12,22 +12,15 @@ const
proc awaitThreadResult*[T](signal: ThreadSignalPtr, handle: Flowvar[T]): Future[?!T] {.async.} =
await wait(signal)
template closeSig() =
let sigRes = signal.close()
if sigRes.isErr:
raise (ref Defect)(msg: sigRes.error())
var
res: T
awaitTotal: Duration
while awaitTotal < CompletionTimeout:
if handle.tryComplete(res): ## TODO: pretty sure this leaks currently
closeSig()
return success(res)
else:
awaitTotal += CompletionRetryDelay
await sleepAsync(CompletionRetryDelay)
closeSig()
return failure("Task signaled finish but didn't return any result within " & $CompletionRetryDelay)