Pārlūkot izejas kodu

* implementation of tiny heap's GetMem changed, so that it doesn't use FreeMem
internally.

git-svn-id: trunk@28580 -

nickysn 11 gadi atpakaļ
vecāks
revīzija
9b41b10350
1 mainītis faili ar 17 papildinājumiem un 7 dzēšanām
  1. 17 7
      rtl/inc/tinyheap.inc

+ 17 - 7
rtl/inc/tinyheap.inc

@@ -86,7 +86,7 @@
 
 
     function SysTinyGetMem(Size: ptruint): pointer;
     function SysTinyGetMem(Size: ptruint): pointer;
       var
       var
-        p, prev: PTinyHeapBlock;
+        p, prev, p2: PTinyHeapBlock;
         AllocSize, RestSize: ptruint;
         AllocSize, RestSize: ptruint;
       begin
       begin
 {$ifdef DEBUG_TINY_HEAP}
 {$ifdef DEBUG_TINY_HEAP}
@@ -114,15 +114,25 @@
                 RestSize := 0;
                 RestSize := 0;
               end;
               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
             else
-              prev^.next := p^.next;
+              begin
+                if prev = nil then
+                  TinyHeapBlocks := p^.Next
+                else
+                  prev^.next := p^.next;
+              end;
 
 
             PTinyHeapMemBlockSize(p)^ := size;
             PTinyHeapMemBlockSize(p)^ := size;
-
-            if RestSize > 0 then
-              InternalTinyFreeMem(pointer(TTinyHeapPointerArithmeticType(p)+AllocSize), RestSize);
           end
           end
         else
         else
           if ReturnNilIfGrowHeapFails then
           if ReturnNilIfGrowHeapFails then