I was developing some code using Malebolgia and found an unexpected problem.
This example code crashes crashes about 80% of the time when I run it:
type Svec* = ref array[19,float]
proc subfn( svec:Svec ) = discard 0
proc fn( svec:ptr Svec ) =
let svec = svec[]
subfn(svec)
#the above 2 lines lead to crashes, but this does not:
#subfn(svec[])
import malebolgia
proc test() =
var sv = new Svec
var m = createMaster()
m.awaitAll:
for i in 0..99:
m.spawn fn(sv.addr)
echo "hello"
for i in 0..77:
test()
echo "ok"
Run
But when I replace the lines
let svec = svec[]
subfn(svec)
Run
with
subfn(svec[])
Run
then it runs perfectly.
I guess the problem is that the thread is freeing the memory associated with
the local variable?
If this behaviour is unexpected then please confirm and I will report it as a
bug.
(Nim v2.0.2 with compiler flags -mm:arc -d:ThreadPoolSize=40 -d:useMalloc were
used)