diff options
author | Dominik Picheta <dominikpicheta@gmail.com> | 2016-11-21 23:44:38 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@gmail.com> | 2016-11-21 23:44:38 +0100 |
commit | c538e1ae084ed7a1888c37b7c267449f166b9c11 (patch) | |
tree | 1d368127615fcfd80de657a0b167169c8117495e /lib/pure/includes | |
parent | e6f6323e770d326e633c5f1d7e5205d7cb2c4ca3 (diff) | |
download | Nim-c538e1ae084ed7a1888c37b7c267449f166b9c11.tar.gz |
Fixes asyncdispatch.all completing its res future more than once.
Diffstat (limited to 'lib/pure/includes')
-rw-r--r-- | lib/pure/includes/asyncfutures.nim | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/lib/pure/includes/asyncfutures.nim b/lib/pure/includes/asyncfutures.nim index dfcfa37a0..029c5f157 100644 --- a/lib/pure/includes/asyncfutures.nim +++ b/lib/pure/includes/asyncfutures.nim @@ -263,13 +263,13 @@ proc all*[T](futs: varargs[Future[T]]): auto = for fut in futs: fut.callback = proc(f: Future[T]) = - if f.failed: - retFuture.fail(f.error) - elif not retFuture.finished: - inc(completedFutures) - - if completedFutures == totalFutures: - retFuture.complete() + inc(completedFutures) + if not retFuture.finished: + if f.failed: + retFuture.fail(f.error) + else: + if completedFutures == totalFutures: + retFuture.complete() if totalFutures == 0: retFuture.complete() @@ -285,14 +285,15 @@ proc all*[T](futs: varargs[Future[T]]): auto = for i, fut in futs: proc setCallback(i: int) = fut.callback = proc(f: Future[T]) = - if f.failed: - retFuture.fail(f.error) - elif not retFuture.finished: - retValues[i] = f.read() - inc(completedFutures) - - if completedFutures == len(retValues): - retFuture.complete(retValues) + inc(completedFutures) + if not retFuture.finished: + if f.failed: + retFuture.fail(f.error) + else: + retValues[i] = f.read() + + if completedFutures == len(retValues): + retFuture.complete(retValues) setCallback(i) |