* while loop replaced with a repeat..until loop in InternalTinyFreeMem

git-svn-id: trunk@28161 -
This commit is contained in:
nickysn 2014-07-05 09:47:59 +00:00
parent 441e6c6083
commit 4e2cc365d1

View File

@ -105,72 +105,70 @@
b, p, prev: PTinyHeapBlock;
concatenated: boolean;
begin
concatenated := true;
while concatenated do
begin
concatenated := false;
b := addr;
repeat
concatenated := false;
b := addr;
b^.Next := TinyHeapBlocks;
b^.Size := Size;
b^.EndAddr := pointer(ptruint(addr)+size);
b^.Next := TinyHeapBlocks;
b^.Size := Size;
b^.EndAddr := pointer(ptruint(addr)+size);
if TinyHeapBlocks = nil then
TinyHeapBlocks := b
else
begin
p := TinyHeapBlocks;
prev := nil;
if TinyHeapBlocks = nil then
TinyHeapBlocks := b
else
begin
p := TinyHeapBlocks;
prev := nil;
while assigned(p) do
begin
if p^.EndAddr = addr then
begin
addr:=p;
size:=p^.size+size;
if prev = nil then
TinyHeapBlocks:=p^.next
else
prev^.next:=p^.next;
concatenated:=true;
break;
end
else if p = b^.EndAddr then
begin
size:=p^.size+size;
if prev = nil then
TinyHeapBlocks:=p^.next
else
prev^.next:=p^.next;
concatenated:=true;
break;
end;
prev := p;
p := p^.next;
end;
while assigned(p) do
begin
if p^.EndAddr = addr then
begin
addr:=p;
size:=p^.size+size;
if prev = nil then
TinyHeapBlocks:=p^.next
else
prev^.next:=p^.next;
concatenated:=true;
break;
end
else if p = b^.EndAddr then
begin
size:=p^.size+size;
if prev = nil then
TinyHeapBlocks:=p^.next
else
prev^.next:=p^.next;
concatenated:=true;
break;
end;
if not concatenated then
begin
p := TinyHeapBlocks;
prev := nil;
prev := p;
p := p^.next;
end;
while assigned(p) and (p^.Size < size) do
begin
prev := p;
p := p^.Next;
end;
if not concatenated then
begin
p := TinyHeapBlocks;
prev := nil;
if assigned(prev) then
begin
b^.Next := p;
prev^.Next := b;
end
else
TinyHeapBlocks := b;
end;
end;
end;
while assigned(p) and (p^.Size < size) do
begin
prev := p;
p := p^.Next;
end;
if assigned(prev) then
begin
b^.Next := p;
prev^.Next := b;
end
else
TinyHeapBlocks := b;
end;
end;
until not concatenated;
end;
function SysTinyFreeMem(Addr: Pointer): ptruint;