* Fix sym owner in wrapper proc * threadpool changes * revert lowerings * add newFastMoveStmt * try fixing test by switching to cpp Co-authored-by: cooldome <ariabushenko@bk.ru>
This commit is contained in:
parent
9295251e68
commit
d3b0132061
5 changed files with 111 additions and 45 deletions
63
tests/arc/tthread.nim
Normal file
63
tests/arc/tthread.nim
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
discard """
|
||||
cmd: "nim cpp --gc:arc --threads:on $file"
|
||||
output: '''ok1
|
||||
ok2
|
||||
destroyed
|
||||
destroyed
|
||||
destroyed
|
||||
'''
|
||||
"""
|
||||
import threadpool, os
|
||||
|
||||
type
|
||||
MyObj = object
|
||||
p: int
|
||||
MyObjRef = ref MyObj
|
||||
|
||||
proc `=destroy`(x: var MyObj) =
|
||||
if x.p != 0:
|
||||
echo "destroyed"
|
||||
|
||||
proc thread1(): string =
|
||||
os.sleep(1000)
|
||||
return "ok1"
|
||||
|
||||
proc thread2(): ref string =
|
||||
os.sleep(1000)
|
||||
new(result)
|
||||
result[] = "ok2"
|
||||
|
||||
proc thread3(): ref MyObj =
|
||||
os.sleep(1000)
|
||||
new(result)
|
||||
result[].p = 2
|
||||
|
||||
var fv1 = spawn thread1()
|
||||
var fv2 = spawn thread2()
|
||||
var fv3 = spawn thread3()
|
||||
sync()
|
||||
echo ^fv1
|
||||
echo (^fv2)[]
|
||||
|
||||
|
||||
proc thread4(x: MyObjRef): MyObjRef {.nosinks.} =
|
||||
os.sleep(1000)
|
||||
result = x
|
||||
|
||||
proc thread5(x: sink MyObjRef): MyObjRef =
|
||||
os.sleep(1000)
|
||||
result = x
|
||||
|
||||
proc ref_forwarding_test =
|
||||
var x = new(MyObj)
|
||||
x[].p = 2
|
||||
var y = spawn thread4(x)
|
||||
|
||||
proc ref_sink_forwarding_test =
|
||||
var x = new(MyObj)
|
||||
x[].p = 2
|
||||
var y = spawn thread5(x)
|
||||
|
||||
ref_forwarding_test()
|
||||
ref_sink_forwarding_test()
|
||||
sync()
|
||||
Loading…
Add table
Add a link
Reference in a new issue