Просмотр исходного кода

* heap manager: fix shrinking var sized chunks to very small sizes < sizeof(tmemchunk_var)
was no problem previously due to sizeof(tmemchunk_var) <= blocksize

git-svn-id: trunk@7464 -

micha 18 лет назад
Родитель
Сommit
f9d2ea7e3a
1 измененных файлов с 7 добавлено и 1 удалено
  1. 7 1
      rtl/inc/heap.inc

+ 7 - 1
rtl/inc/heap.inc

@@ -1226,7 +1226,13 @@ begin
       exit;
     end;
 
-  { var memchunck }
+  { var memchunk }
+
+  { do not fragment the heap with small shrinked blocks }
+  {  also solves problem with var sized chunks smaller than sizeof(tmemchunk_var) }
+  if size < maxblocksize div 2 then
+    exit(false);
+
   currsize := chunksize and sizemask;
   size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;