mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
40 lines
785 B
Nim
40 lines
785 B
Nim
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()
|