summary refs log tree commit diff stats
path: root/tests/coroutines
diff options
context:
space:
mode:
authorRokas Kupstys <rokups@zoho.com>2017-03-02 15:53:50 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-03-02 14:53:50 +0100
commitcd2721242ad8faf7013911ac57bfcfff62578a2f (patch)
tree6d2473c58fa857e14c66ba3dc5b5351ca84debb7 /tests/coroutines
parent34a3d40d18ef4ff73c629e38738068fe509e3c6c (diff)
downloadNim-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.nim19
-rw-r--r--tests/coroutines/twait.nim.cfg1
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