blob: 9f5c30ebd4b7213fb60ddb3fb48ca47e5fa63b0b (
plain) (
tree)
|
|
discard """
outputsub: "no leak: "
"""
type
Module = object
nodes*: seq[PNode]
id: int
PModule = ref Module
Node = object
owner*: PModule
data*: array[0..200, char] # some fat to drain memory faster
id: int
PNode = ref Node
var
gid: int
when false:
proc finalizeNode(x: PNode) =
echo "node id: ", x.id
proc finalizeModule(x: PModule) =
echo "module id: ", x.id
proc newNode(owner: PModule): PNode =
new(result)
result.owner = owner
inc gid
result.id = gid
proc compileModule: PModule =
new(result)
result.nodes = @[]
for i in 0..100:
result.nodes.add newNode(result)
inc gid
result.id = gid
var gModuleCache: PModule
proc loop =
for i in 0..1000:
gModuleCache = compileModule()
gModuleCache = nil
GC_fullCollect()
if getOccupiedMem() > 9_000_000:
echo "still a leak! ", getOccupiedMem()
quit(1)
echo "no leak: ", getOccupiedMem()
loop()
|