12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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()
|