make memory regions robust; disable free lists for now

This commit is contained in:
Andreas Rumpf 2018-05-27 11:15:45 +02:00
commit 88bc2d8df4

View file

@ -70,6 +70,7 @@ type
bump: pointer bump: pointer
head, tail: Chunk head, tail: Chunk
nextChunkSize, totalSize: int nextChunkSize, totalSize: int
when false:
freeLists: array[MaxSmallObject div MemAlign, FreeEntry] freeLists: array[MaxSmallObject div MemAlign, FreeEntry]
holes: SizedFreeEntry holes: SizedFreeEntry
when hasThreadSupport: when hasThreadSupport:
@ -145,6 +146,7 @@ proc allocSlowPath(r: var MemRegion; size: int) =
r.remaining = s - sizeof(BaseChunk) r.remaining = s - sizeof(BaseChunk)
proc allocFast(r: var MemRegion; size: int): pointer = proc allocFast(r: var MemRegion; size: int): pointer =
when false:
if size <= MaxSmallObject: if size <= MaxSmallObject:
var it = r.freeLists[size div MemAlign] var it = r.freeLists[size div MemAlign]
if it != nil: if it != nil:
@ -184,7 +186,8 @@ proc dealloc(r: var MemRegion; p: pointer; size: int) =
# it is benefitial to not use the free lists here: # it is benefitial to not use the free lists here:
if r.bump -! size == p: if r.bump -! size == p:
dec r.bump, size dec r.bump, size
elif size <= MaxSmallObject: when false:
if size <= MaxSmallObject:
let it = cast[FreeEntry](p) let it = cast[FreeEntry](p)
it.next = r.freeLists[size div MemAlign] it.next = r.freeLists[size div MemAlign]
r.freeLists[size div MemAlign] = it r.freeLists[size div MemAlign] = it
@ -220,6 +223,7 @@ proc setObstackPtr*(r: var MemRegion; sp: StackPtr) =
if sp.current.next != nil: if sp.current.next != nil:
deallocAll(r, sp.current.next) deallocAll(r, sp.current.next)
sp.current.next = nil sp.current.next = nil
when false:
# better leak this memory than be sorry: # better leak this memory than be sorry:
for i in 0..high(r.freeLists): r.freeLists[i] = nil for i in 0..high(r.freeLists): r.freeLists[i] = nil
r.holes = nil r.holes = nil