Răsfoiți Sursa

* allocate always a minimum block size, else free list management causes memory corruption

git-svn-id: trunk@34930 -
florian 8 ani în urmă
părinte
comite
16fa079a2a
1 a modificat fișierele cu 4 adăugiri și 1 ștergeri
  1. 4 1
      rtl/embedded/heapmgr.pp

+ 4 - 1
rtl/embedded/heapmgr.pp

@@ -49,7 +49,10 @@ Unit heapmgr;
         p, prev: PHeapBlock;
         p, prev: PHeapBlock;
         AllocSize, RestSize: ptruint;
         AllocSize, RestSize: ptruint;
       begin
       begin
-        AllocSize := align(size+sizeof(pointer), sizeof(pointer));
+        if size<MinBlock then
+          AllocSize := MinBlock
+        else
+          AllocSize := align(size, sizeof(pointer));
 
 
         p := Blocks;
         p := Blocks;
         prev := nil;
         prev := nil;