summary refs log tree commit diff stats
path: root/tests/threads/ttryrecv.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/threads/ttryrecv.nim')
-rw-r--r--tests/threads/ttryrecv.nim36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/threads/ttryrecv.nim b/tests/threads/ttryrecv.nim
new file mode 100644
index 000000000..fcff94e78
--- /dev/null
+++ b/tests/threads/ttryrecv.nim
@@ -0,0 +1,36 @@
+discard """
+  matrix: "--mm:refc"
+  outputsub: "channel is empty"
+"""
+
+# bug #1816
+
+from random import rand
+from os import sleep
+
+type PComm = ptr Channel[int]
+
+proc doAction(outC: PComm) {.thread.} =
+  for i in 0 ..< 5:
+    sleep(rand(50))
+    send(outC[], i)
+
+var
+  thr: Thread[PComm]
+  chan: Channel[int]
+
+open(chan)
+createThread[PComm](thr, doAction, addr(chan))
+
+while true:
+  let (flag, x) = tryRecv(chan)
+  if flag:
+    echo("received from chan: " & $x)
+  else:
+    echo "channel is empty"
+    break
+
+echo "Finished listening"
+
+joinThread(thr)
+close(chan)