From ba80bd807ca0f8562974aa4deae2b956cf6bf6d2 Mon Sep 17 00:00:00 2001 From: Araq Date: Sun, 24 Mar 2013 13:05:19 +0100 Subject: fixes #376 --- tests/gc/closureleak.nim | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/gc/closureleak.nim (limited to 'tests/gc') 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 -- cgit 1.4.1-2-gfad0