From 9b41b103509dcd26ac9848c47a77aa90000a1285 Mon Sep 17 00:00:00 2001 From: nickysn Date: Mon, 1 Sep 2014 23:37:00 +0000 Subject: [PATCH] * implementation of tiny heap's GetMem changed, so that it doesn't use FreeMem internally. git-svn-id: trunk@28580 - --- rtl/inc/tinyheap.inc | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/rtl/inc/tinyheap.inc b/rtl/inc/tinyheap.inc index 647f72b123..72e71aa9db 100644 --- a/rtl/inc/tinyheap.inc +++ b/rtl/inc/tinyheap.inc @@ -86,7 +86,7 @@ function SysTinyGetMem(Size: ptruint): pointer; var - p, prev: PTinyHeapBlock; + p, prev, p2: PTinyHeapBlock; AllocSize, RestSize: ptruint; begin {$ifdef DEBUG_TINY_HEAP} @@ -114,15 +114,25 @@ RestSize := 0; end; - if prev = nil then - TinyHeapBlocks := p^.Next + if RestSize > 0 then + begin + p2 := pointer(TTinyHeapPointerArithmeticType(p)+AllocSize); + p2^.Next := p^.Next; + p2^.Size := EncodeTinyHeapFreeBlockSize(RestSize); + if prev = nil then + TinyHeapBlocks := p2 + else + prev^.next := p2; + end else - prev^.next := p^.next; + begin + if prev = nil then + TinyHeapBlocks := p^.Next + else + prev^.next := p^.next; + end; PTinyHeapMemBlockSize(p)^ := size; - - if RestSize > 0 then - InternalTinyFreeMem(pointer(TTinyHeapPointerArithmeticType(p)+AllocSize), RestSize); end else if ReturnNilIfGrowHeapFails then