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