mirror of
https://github.com/status-im/nim-codex.git
synced 2025-02-17 21:27:54 +00:00
fix awaitThreadResult
This commit is contained in:
parent
54edcb1ce7
commit
a96ea80148
@ -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.} =
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user