diff options
Diffstat (limited to 'tests/parallel/tblocking_channel.nim')
-rw-r--r-- | tests/parallel/tblocking_channel.nim | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/parallel/tblocking_channel.nim b/tests/parallel/tblocking_channel.nim new file mode 100644 index 000000000..f3ccd166a --- /dev/null +++ b/tests/parallel/tblocking_channel.nim @@ -0,0 +1,39 @@ +discard """ +output: "" +disabled: "freebsd" # see #15725 +""" + +import threadpool, os + +var chan: Channel[int] + +chan.open(2) +chan.send(1) +chan.send(2) +doAssert(not chan.trySend(3)) # At this point chan is at max capacity + +proc receiver() = + doAssert(chan.recv() == 1) + doAssert(chan.recv() == 2) + doAssert(chan.recv() == 3) + doAssert(chan.recv() == 4) + doAssert(chan.recv() == 5) + +var msgSent = false + +proc emitter() = + chan.send(3) + msgSent = true + +spawn emitter() +# At this point emitter should be stuck in `send` +sleep(50) # Sleep a bit to ensure that it is still stuck +doAssert(not msgSent) + +spawn receiver() +sleep(50) # Sleep a bit to let receicer consume the messages +doAssert(msgSent) # Sender should be unblocked + +doAssert(chan.trySend(4)) +chan.send(5) +sync() |