diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2018-11-07 23:46:29 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-07 23:46:29 +0000 |
commit | d0a02fe66bb01ef49645a11562c72fa585170b8e (patch) | |
tree | cddbd393bb55ac6bf8c5c45224824fa64770518c | |
parent | 8a357c270b32d41c2a721dc88197f0a8e35c47e8 (diff) | |
parent | 15c66a06f96d4c801fc3ccb3be24536934805cce (diff) | |
download | Nim-d0a02fe66bb01ef49645a11562c72fa585170b8e.tar.gz |
Merge pull request #9642 from narimiran/callback-order
keep the order of the callbacks
-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 ''' """ |