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