diff options
-rw-r--r-- | lib/pure/asyncfutures.nim | 16 | ||||
-rw-r--r-- | tests/async/tcallbacks.nim | 5 |
2 files changed, 14 insertions, 7 deletions
diff --git a/lib/pure/asyncfutures.nim b/lib/pure/asyncfutures.nim index 965e70055..aa8314632 100644 --- a/lib/pure/asyncfutures.nim +++ b/lib/pure/asyncfutures.nim @@ -123,11 +123,17 @@ proc add(callbacks: var CallbackList, function: CallbackFunc) = callbacks.function = function assert callbacks.next == nil else: - let newNext = new(ref CallbackList) - newNext.function = callbacks.function - newNext.next = callbacks.next - callbacks.next = newNext - callbacks.function = function + let newCallback = new(ref CallbackList) + newCallback.function = function + newCallback.next = nil + + if callbacks.next == nil: + callbacks.next = newCallback + else: + var last = callbacks.next + while last.next != nil: + last = last.next + last.next = newCallback proc complete*[T](future: Future[T], val: T) = ## Completes ``future`` with value ``val``. diff --git a/tests/async/tcallbacks.nim b/tests/async/tcallbacks.nim index 8c08032cd..bd82d5824 100644 --- a/tests/async/tcallbacks.nim +++ b/tests/async/tcallbacks.nim @@ -1,8 +1,9 @@ discard """ exitcode: 0 - output: '''3 -2 + output: ''' 1 +2 +3 5 ''' """ |