diff options
author | Araq <rumpf_a@web.de> | 2013-03-24 13:05:19 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2013-03-24 13:05:19 +0100 |
commit | ba80bd807ca0f8562974aa4deae2b956cf6bf6d2 (patch) | |
tree | baaef873a2b47ea67715a14a518f07297bece06b /tests/gc | |
parent | dcb0f243de104635ab4b5d3824cb665635c34f1e (diff) | |
download | Nim-ba80bd807ca0f8562974aa4deae2b956cf6bf6d2.tar.gz |
fixes #376
Diffstat (limited to 'tests/gc')
-rw-r--r-- | tests/gc/closureleak.nim | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/gc/closureleak.nim b/tests/gc/closureleak.nim new file mode 100644 index 000000000..c3eeac07b --- /dev/null +++ b/tests/gc/closureleak.nim @@ -0,0 +1,33 @@ +discard """ + outputsub: "true" +""" + +from strutils import join + +type + TFoo * = object + id: int + func: proc(){.closure.} +var foo_counter = 0 +var alive_foos = newseq[int](0) + +proc free*(some: ref TFoo) = + #echo "Tfoo #", some.id, " freed" + alive_foos.del alive_foos.find(some.id) +proc newFoo*(): ref TFoo = + new result, free + + result.id = foo_counter + alive_foos.add result.id + inc foo_counter + +for i in 0 .. <10: + discard newFoo() + +for i in 0 .. <10: + let f = newFoo() + f.func = proc = + echo f.id + +gc_fullcollect() +echo alive_foos.len <= 2 |