mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 03:59:13 +02:00
* fixed tryresizemem
This commit is contained in:
parent
7cb6368f12
commit
d7ae60a9e0
@ -1202,25 +1202,17 @@ var
|
||||
pnew,
|
||||
pcurr : pmemchunk_var;
|
||||
begin
|
||||
{ fix needed size }
|
||||
if size <= (maxblocksize - sizeof(tmemchunk_fixed_hdr)) then
|
||||
begin
|
||||
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
||||
end
|
||||
else
|
||||
begin
|
||||
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
||||
end;
|
||||
|
||||
{ fix p to point to the heaprecord }
|
||||
pcurrsize := pmemchunk_fixed(p-sizeof(tmemchunk_fixed_hdr))^.size;
|
||||
if (pcurrsize and fixedsizeflag) = 0 then
|
||||
begin
|
||||
currsize := pcurrsize and sizemask;
|
||||
size := (size+sizeof(tmemchunk_var_hdr)+(blocksize-1)) and sizemask;
|
||||
end
|
||||
else
|
||||
begin
|
||||
currsize := pcurrsize and fixedsizemask;
|
||||
size := (size+sizeof(tmemchunk_fixed_hdr)+(blocksize-1)) and fixedsizemask;
|
||||
end;
|
||||
oldsize := currsize;
|
||||
{ is the allocated block still correct? }
|
||||
@ -1235,11 +1227,11 @@ begin
|
||||
end;
|
||||
|
||||
{ don't do resizes on fixed-size blocks }
|
||||
// if (pcurrsize and fixedsizeflag) <> 0 then
|
||||
// begin
|
||||
if (pcurrsize and fixedsizeflag) <> 0 then
|
||||
begin
|
||||
SysTryResizeMem := false;
|
||||
exit;
|
||||
// end;
|
||||
end;
|
||||
|
||||
{ get pointer to block }
|
||||
pcurr := pmemchunk_var(pointer(p)-sizeof(tmemchunk_var_hdr));
|
||||
@ -1287,19 +1279,21 @@ begin
|
||||
MemoryManager.FreeMem(p);
|
||||
p := nil;
|
||||
end;
|
||||
end else
|
||||
end
|
||||
else
|
||||
{ Allocate a new block? }
|
||||
if p=nil then
|
||||
begin
|
||||
p := MemoryManager.AllocMem(size);
|
||||
end else
|
||||
p := MemoryManager.GetMem(size);
|
||||
end
|
||||
else
|
||||
{ Resize block }
|
||||
if not SysTryResizeMem(p,size) then
|
||||
begin
|
||||
minsize := MemoryManager.MemSize(p);
|
||||
if size < minsize then
|
||||
minsize := size;
|
||||
p2 := MemoryManager.AllocMem(size);
|
||||
p2 := MemoryManager.GetMem(size);
|
||||
if p2<>nil then
|
||||
Move(p^,p2^,minsize);
|
||||
MemoryManager.FreeMem(p);
|
||||
@ -1355,7 +1349,10 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.47 2005-03-04 16:49:34 peter
|
||||
Revision 1.48 2005-03-20 18:57:29 peter
|
||||
* fixed tryresizemem
|
||||
|
||||
Revision 1.47 2005/03/04 16:49:34 peter
|
||||
* fix getheapstatus bootstrapping
|
||||
|
||||
Revision 1.46 2005/03/02 14:25:19 marco
|
||||
|
Loading…
Reference in New Issue
Block a user