From 22b4cf192d48ca2e689aa31e7714f76964f8fd92 Mon Sep 17 00:00:00 2001 From: Julian Fondren Date: Wed, 15 May 2019 19:57:45 -0500 Subject: [PATCH] fix for unnecessary poll() in some uses of async --- lib/pure/asyncstreams.nim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/pure/asyncstreams.nim b/lib/pure/asyncstreams.nim index 57800ce108ff..f470d5b6115c 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 =