* 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
This commit is contained in:
parent
452366982d
commit
83e002a318
1 changed files with 33 additions and 0 deletions
33
tests/stdlib/tchannels.nim
Normal file
33
tests/stdlib/tchannels.nim
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
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()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue