This commit is contained in:
Araq 2015-01-05 02:27:24 +01:00
commit 7524610b31
5 changed files with 66 additions and 11 deletions

View file

@ -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()

View 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()

View file

@ -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")

View file

@ -107,12 +107,15 @@ proc dllTests(r: var TResults, cat: Category, options: string) =
# ------------------------------ GC tests -------------------------------------
proc gcTests(r: var TResults, cat: Category, options: string) =
template test(filename: expr): stmt =
template testWithoutMs(filename: expr): stmt =
testSpec r, makeTest("tests/gc" / filename, options, cat, actionRun)
testSpec r, makeTest("tests/gc" / filename, options &
" -d:release", cat, actionRun)
testSpec r, makeTest("tests/gc" / filename, options &
" -d:release -d:useRealtimeGC", cat, actionRun)
template test(filename: expr): stmt =
testWithoutMs filename
testSpec r, makeTest("tests/gc" / filename, options &
" --gc:markAndSweep", cat, actionRun)
testSpec r, makeTest("tests/gc" / filename, options &
@ -124,13 +127,15 @@ proc gcTests(r: var TResults, cat: Category, options: string) =
test "gctest"
test "gcleak3"
test "gcleak4"
test "gcleak5"
# Disabled because it works and takes too long to run:
#test "gcleak5"
test "weakrefs"
test "cycleleak"
test "closureleak"
test "refarrayleak"
test "stackrefleak"
testWithoutMs "refarrayleak"
test "stackrefleak"
test "cyclecollector"
# ------------------------- threading tests -----------------------------------