* Apply bugfix patch by Michalis Kamburelis from bug report 13463

git-svn-id: trunk@12999 -
This commit is contained in:
daniel 2009-04-04 13:09:29 +00:00
parent ab41a9b2b1
commit 1b8902e341

View File

@ -117,11 +117,19 @@ procedure fftw_freemem(p:pointer);inline;
procedure fftw_getmem(var p:pointer;size:sizeint);
begin
{$IFDEF align}
getmem(p,size+16-1);
var
originalptr:pointer;
begin
{ We allocate additional "align-1" bytes to be able to align.
And we allocate additional "SizeOf(Pointer)" to always have space to store
the value of the original pointer. }
getmem(originalptr,size + align-1 + SizeOf(Pointer));
ptruint(p):=(ptruint(originalptr) + SizeOf(Pointer));
ptruint(p):=(ptruint(p)+align-1) and not (align-1);
PPointer(ptruint(p) - SizeOf(Pointer))^:=originalptr;
{$ELSE}
begin
getmem(p,size);
{$ENDIF}
end;
@ -129,7 +137,11 @@ end;
procedure fftw_freemem(p:pointer);inline;
begin
{$IFDEF align}
freemem(PPointer(ptruint(p) - SizeOf(Pointer))^);
{$ELSE}
freemem(p);
{$ENDIF}
end;
end.