From 964b5dac7cbfe04a8d015fe9d6c1020143bc51d2 Mon Sep 17 00:00:00 2001 From: Miran Date: Fri, 9 Nov 2018 23:45:17 +0100 Subject: 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 --- lib/pure/asyncfutures.nim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib/pure/asyncfutures.nim') 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 -- cgit 1.4.1-2-gfad0