Files
Nim/tests/stdlib/tchannels.nim
flywind 83e002a318 follow up #17391 add testcase (#17404)
* Revert "make system random work in VM"

* fix #17380

* attempt to fix bug

* fix

* better

* fix

* a bit

* fix the leaks

* revert

* fix

* better

* follow up #17391

* fix

* Update tchannels.nim

* Update tests/stdlib/tchannels.nim

* Update tchannels.nim
2021-03-19 14:48:31 +08:00

34 lines
858 B
Nim

discard """
timeout: 5.0 # but typically < 1s
disabled: "freebsd"
matrix: "--gc:arc --threads:on; --gc:arc --threads:on -d:danger"
"""
when true:
# bug #17380: this was either blocking (without -d:danger) or crashing with SIGSEGV (with -d:danger)
import std/[channels, isolation]
const
N1 = 10
N2 = 100
var
sender: array[N1, Thread[void]]
receiver: array[5, Thread[void]]
var chan = newChannel[seq[string]](N1 * N2) # large enough to not block
proc sendHandler() =
chan.send(isolate(@["Hello, Nim"]))
proc recvHandler() =
template fn =
let x = chan.recv()
fn()
template benchmark() =
for t in mitems(sender):
t.createThread(sendHandler)
joinThreads(sender)
for t in mitems(receiver):
t.createThread(recvHandler)
joinThreads(receiver)
for i in 0..<N2:
benchmark()