From cd2721242ad8faf7013911ac57bfcfff62578a2f Mon Sep 17 00:00:00 2001 From: Rokas Kupstys Date: Thu, 2 Mar 2017 15:53:50 +0200 Subject: 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. --- tests/coroutines/twait.nim | 19 +++++++++++++++++++ tests/coroutines/twait.nim.cfg | 1 + 2 files changed, 20 insertions(+) create mode 100644 tests/coroutines/twait.nim create mode 100644 tests/coroutines/twait.nim.cfg (limited to 'tests/coroutines') 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 -- cgit 1.4.1-2-gfad0