diff options
author | Rokas Kupstys <rokups@zoho.com> | 2017-03-02 15:53:50 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-03-02 14:53:50 +0100 |
commit | cd2721242ad8faf7013911ac57bfcfff62578a2f (patch) | |
tree | 6d2473c58fa857e14c66ba3dc5b5351ca84debb7 /tests/coroutines | |
parent | 34a3d40d18ef4ff73c629e38738068fe509e3c6c (diff) | |
download | Nim-cd2721242ad8faf7013911ac57bfcfff62578a2f.tar.gz |
Fix waiting on coroutines (#5463)
Public coroutine API returns a safe reference to specific running coroutine. Fixes bug where multiple coroutines executing same procedure would identify as same coroutine. Greatly optimizes `alive()` (and as a result of that `wait()`) calls. Coroutine struct is allocated together with stack as memory unmanaged by GC.
Diffstat (limited to 'tests/coroutines')
-rw-r--r-- | tests/coroutines/twait.nim | 19 | ||||
-rw-r--r-- | tests/coroutines/twait.nim.cfg | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/tests/coroutines/twait.nim b/tests/coroutines/twait.nim new file mode 100644 index 000000000..d8752b094 --- /dev/null +++ b/tests/coroutines/twait.nim @@ -0,0 +1,19 @@ +discard """ + output: "Exit 1\nExit 2" +""" +import coro + +var coro1: CoroutineRef + +proc testCoroutine1() = + for i in 0..<10: + suspend(0) + echo "Exit 1" + +proc testCoroutine2() = + coro1.wait() + echo "Exit 2" + +coro1 = coro.start(testCoroutine1) +coro.start(testCoroutine2) +run() diff --git a/tests/coroutines/twait.nim.cfg b/tests/coroutines/twait.nim.cfg new file mode 100644 index 000000000..b011bc585 --- /dev/null +++ b/tests/coroutines/twait.nim.cfg @@ -0,0 +1 @@ +-d:nimCoroutines |