From 55e8aefbea2c6a152af903e60832a026b8bbf091 Mon Sep 17 00:00:00 2001 From: Araq Date: Tue, 9 Jul 2019 20:15:40 +0200 Subject: newruntime: async progress --- lib/pure/asyncfutures.nim | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'lib/pure/asyncfutures.nim') diff --git a/lib/pure/asyncfutures.nim b/lib/pure/asyncfutures.nim index 4a80056e2..1243a17f2 100644 --- a/lib/pure/asyncfutures.nim +++ b/lib/pure/asyncfutures.nim @@ -144,16 +144,32 @@ proc checkFinished[T](future: Future[T]) = raise err proc call(callbacks: var CallbackList) = - var current = callbacks + when not defined(nimV2): + # strictly speaking a little code duplication here, but we strive + # to minimize regressions and I'm not sure I got the 'nimV2' logic + # right: + var current = callbacks + while true: + if not current.function.isNil: + callSoon(current.function) + + if current.next.isNil: + break + else: + current = current.next[] + else: + var currentFunc = unown callbacks.function + var currentNext = unown callbacks.next - while true: - if not current.function.isNil: - callSoon(current.function) + while true: + if not currentFunc.isNil: + callSoon(currentFunc) - if current.next.isNil: - break - else: - current = current.next[] + if currentNext.isNil: + break + else: + currentFunc = currentNext.function + currentNext = unown currentNext.next # callback will be called only once, let GC collect them now callbacks.next = nil -- cgit 1.4.1-2-gfad0