diff options
author | Julian Fondren <julian.fondren@gmail.com> | 2019-05-15 19:57:45 -0500 |
---|---|---|
committer | Julian Fondren <julian.fondren@gmail.com> | 2019-05-15 19:57:45 -0500 |
commit | 22b4cf192d48ca2e689aa31e7714f76964f8fd92 (patch) | |
tree | 865f6cd3eafdc8617db410309e1a4acaaa4c5f15 | |
parent | e26545797e23b40cd857f7ccba63919cb87ed51b (diff) | |
download | Nim-22b4cf192d48ca2e689aa31e7714f76964f8fd92.tar.gz |
fix for unnecessary poll() in some uses of async
-rw-r--r-- | lib/pure/asyncstreams.nim | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/pure/asyncstreams.nim b/lib/pure/asyncstreams.nim index 57800ce10..f470d5b61 100644 --- a/lib/pure/asyncstreams.nim +++ b/lib/pure/asyncstreams.nim @@ -79,7 +79,7 @@ proc read*[T](future: FutureStream[T]): Future[(bool, T)] = ## ``FutureStream``. var resFut = newFuture[(bool, T)]("FutureStream.take") let savedCb = future.cb - future.callback = + var newCb = proc (fs: FutureStream[T]) = # Exit early if `resFut` is already complete. (See #8994). if resFut.finished: return @@ -100,6 +100,11 @@ proc read*[T](future: FutureStream[T]): Future[(bool, T)] = # If the saved callback isn't nil then let's call it. if not savedCb.isNil: savedCb() + + if future.queue.len > 0 or future.finished: + newCb(future) + else: + future.callback = newCb return resFut proc len*[T](future: FutureStream[T]): int = |