diff options
author | genotrance <dev@genotrance.com> | 2018-07-03 21:47:50 -0500 |
---|---|---|
committer | Varriount <Varriount@users.noreply.github.com> | 2018-07-03 22:47:50 -0400 |
commit | c7cc93463233cba085db1f36746355848a27ae4d (patch) | |
tree | d03602dfea71b80a93cf6c7bd6506d2fdad164b8 | |
parent | ab47a870bce94cb33c66f2b27ecb1c62f48ae783 (diff) | |
download | Nim-c7cc93463233cba085db1f36746355848a27ae4d.tar.gz |
Test case for #5626 (#8204)
-rw-r--r-- | tests/threads/t5626.nim | 27 |
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 |