fixes #3793
This commit is contained in:
parent
7e134b5388
commit
d691867c84
2 changed files with 39 additions and 0 deletions
37
tests/gc/tlists.nim
Normal file
37
tests/gc/tlists.nim
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
discard """
|
||||||
|
output: '''Success'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug #3793
|
||||||
|
|
||||||
|
import os
|
||||||
|
import math
|
||||||
|
import lists
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
proc mkleak() =
|
||||||
|
# allocate 10 MB via linked lists
|
||||||
|
let numberOfLists = 100
|
||||||
|
for i in countUp(1, numberOfLists):
|
||||||
|
var leakList = initDoublyLinkedList[string]()
|
||||||
|
let numberOfLeaks = 50000
|
||||||
|
for j in countUp(1, numberOfLeaks):
|
||||||
|
let leakSize = 200
|
||||||
|
let leaked = newString(leakSize)
|
||||||
|
leakList.append(leaked)
|
||||||
|
|
||||||
|
proc mkManyLeaks() =
|
||||||
|
for i in 0..0:
|
||||||
|
when false: echo getOccupiedMem()
|
||||||
|
mkleak()
|
||||||
|
when false: echo getOccupiedMem()
|
||||||
|
# Force a full collection. This should free all of the
|
||||||
|
# lists and bring the memory usage down to a few MB's.
|
||||||
|
GC_fullCollect()
|
||||||
|
when false: echo getOccupiedMem()
|
||||||
|
if getOccupiedMem() > 8 * 200 * 50_000 * 2:
|
||||||
|
echo GC_getStatistics()
|
||||||
|
quit "leaking"
|
||||||
|
echo "Success"
|
||||||
|
|
||||||
|
mkManyLeaks()
|
||||||
|
|
@ -152,6 +152,8 @@ proc gcTests(r: var TResults, cat: Category, options: string) =
|
||||||
testWithoutBoehm "closureleak"
|
testWithoutBoehm "closureleak"
|
||||||
testWithoutMs "refarrayleak"
|
testWithoutMs "refarrayleak"
|
||||||
|
|
||||||
|
testWithoutBoehm "tlists"
|
||||||
|
|
||||||
test "stackrefleak"
|
test "stackrefleak"
|
||||||
test "cyclecollector"
|
test "cyclecollector"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue