Fixes asyncdispatch.all completing its res future more than once.

This commit is contained in:
Dominik Picheta 2016-11-21 23:44:38 +01:00
commit c538e1ae08

View file

@ -263,11 +263,11 @@ proc all*[T](futs: varargs[Future[T]]): auto =
for fut in futs: for fut in futs:
fut.callback = proc(f: Future[T]) = fut.callback = proc(f: Future[T]) =
inc(completedFutures)
if not retFuture.finished:
if f.failed: if f.failed:
retFuture.fail(f.error) retFuture.fail(f.error)
elif not retFuture.finished: else:
inc(completedFutures)
if completedFutures == totalFutures: if completedFutures == totalFutures:
retFuture.complete() retFuture.complete()
@ -285,11 +285,12 @@ proc all*[T](futs: varargs[Future[T]]): auto =
for i, fut in futs: for i, fut in futs:
proc setCallback(i: int) = proc setCallback(i: int) =
fut.callback = proc(f: Future[T]) = fut.callback = proc(f: Future[T]) =
inc(completedFutures)
if not retFuture.finished:
if f.failed: if f.failed:
retFuture.fail(f.error) retFuture.fail(f.error)
elif not retFuture.finished: else:
retValues[i] = f.read() retValues[i] = f.read()
inc(completedFutures)
if completedFutures == len(retValues): if completedFutures == len(retValues):
retFuture.complete(retValues) retFuture.complete(retValues)