diff options
author | Miran <narimiran@disroot.org> | 2018-11-09 23:45:17 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2018-11-09 22:45:17 +0000 |
commit | 964b5dac7cbfe04a8d015fe9d6c1020143bc51d2 (patch) | |
tree | aa11f5b2339b37233111cb77ac6f9caf31623ca3 /lib/pure/asyncfutures.nim | |
parent | 8d850f7a69d473360c5b1a9db9fd998ab9b5dff4 (diff) | |
download | Nim-964b5dac7cbfe04a8d015fe9d6c1020143bc51d2.tar.gz |
complete future only once in `or` (fixes #8982) (#9632)
* complete future only once in `or` Analogous to `and`. Credits to @k0zmo for proposing the solution. * add test
Diffstat (limited to 'lib/pure/asyncfutures.nim')
-rw-r--r-- | lib/pure/asyncfutures.nim | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/pure/asyncfutures.nim b/lib/pure/asyncfutures.nim index aa8314632..5037c8a24 100644 --- a/lib/pure/asyncfutures.nim +++ b/lib/pure/asyncfutures.nim @@ -375,8 +375,9 @@ proc `or`*[T, Y](fut1: Future[T], fut2: Future[Y]): Future[void] = ## complete. var retFuture = newFuture[void]("asyncdispatch.`or`") proc cb[X](fut: Future[X]) = - if fut.failed: retFuture.fail(fut.error) - if not retFuture.finished: retFuture.complete() + if not retFuture.finished: + if fut.failed: retFuture.fail(fut.error) + else: retFuture.complete() fut1.callback = cb[T] fut2.callback = cb[Y] return retFuture |