fixes #1796
This commit is contained in:
parent
e751a0af57
commit
7524610b31
5 changed files with 66 additions and 11 deletions
|
|
@ -7,7 +7,7 @@ from strutils import join
|
|||
type
|
||||
TFoo * = object
|
||||
id: int
|
||||
func: proc(){.closure.}
|
||||
fn: proc(){.closure.}
|
||||
var foo_counter = 0
|
||||
var alive_foos = newseq[int](0)
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ for i in 0 .. <10:
|
|||
|
||||
for i in 0 .. <10:
|
||||
let f = newFoo()
|
||||
f.func = proc =
|
||||
f.fn = proc =
|
||||
echo f.id
|
||||
|
||||
GC_fullcollect()
|
||||
|
|
|
|||
21
tests/gc/cyclecollector.nim
Normal file
21
tests/gc/cyclecollector.nim
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
|
||||
# Program to detect bug #1796 reliably
|
||||
|
||||
type
|
||||
Node = ref object
|
||||
a, b: Node
|
||||
leaf: string
|
||||
|
||||
proc createCycle(leaf: string): Node =
|
||||
new result
|
||||
result.a = result
|
||||
shallowCopy result.leaf, leaf
|
||||
|
||||
proc main =
|
||||
for i in 0 .. 100_000:
|
||||
var leaf = "this is the leaf. it allocates"
|
||||
let x = createCycle(leaf)
|
||||
let y = createCycle(leaf)
|
||||
echo "done ", getOccupiedMem()
|
||||
|
||||
main()
|
||||
|
|
@ -196,7 +196,8 @@ write(stdout, "starting main...\n")
|
|||
main()
|
||||
|
||||
GC_fullCollect()
|
||||
# the M&S GC fails with this call and it's unclear why. Definitely something
|
||||
# we need to fix!
|
||||
GC_fullCollect()
|
||||
writeln(stdout, GC_getStatistics())
|
||||
write(stdout, "finished\n")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue