summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorgenotrance <dev@genotrance.com>2018-07-03 21:47:50 -0500
committerVarriount <Varriount@users.noreply.github.com>2018-07-03 22:47:50 -0400
commitc7cc93463233cba085db1f36746355848a27ae4d (patch)
treed03602dfea71b80a93cf6c7bd6506d2fdad164b8
parentab47a870bce94cb33c66f2b27ecb1c62f48ae783 (diff)
downloadNim-c7cc93463233cba085db1f36746355848a27ae4d.tar.gz
Test case for #5626 (#8204)
-rw-r--r--tests/threads/t5626.nim27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/threads/t5626.nim b/tests/threads/t5626.nim
new file mode 100644
index 000000000..e7024e5ed
--- /dev/null
+++ b/tests/threads/t5626.nim
@@ -0,0 +1,27 @@
+import threadpool
+
+var ch: Channel[int]
+ch.open
+var pch = ch.addr
+
+proc run(f: proc(): int {.gcsafe.}): proc() =
+  let r = spawn f()
+  return proc() = await(r)
+
+var working = false
+
+proc handler(): int =
+  while true:
+    let (h, v) = pch[].tryRecv()
+    if not h:
+      discard cas(working.addr, true, false)
+      break
+  1
+
+proc send(x: int) =
+  ch.send(x)
+  if cas(working.addr, false, true):
+    discard run(handler)
+
+for x in 0..1000000:
+  send(x)
\ No newline at end of file