* Fix mem leak (stack memory never freed) in wasm.

This commit is contained in:
Michaël Van Canneyt 2025-04-07 11:27:01 +02:00
parent 32a9dab401
commit 2406b203be
2 changed files with 7 additions and 3 deletions

View File

@ -562,6 +562,7 @@ end;
function WasiCloseThread(threadHandle : TThreadID) : dword;
begin
FreeStackAndTlsBlock(PWasmThread(threadhandle));
Result:=0;
end;
@ -599,7 +600,6 @@ begin
repeat
until fpc_wasm32_i32_atomic_load8_u(@TH^.ThreadHasFinished)<>0;
{$IFDEF DEBUGWASMTHREADS}DebugWriteln('WaitForThreadTerminate('+IntToStr(PtrUINT(TH))+') : FreeStackAndTlsBlock');{$ENDIF}
FreeStackAndTlsBlock(TH);
end;
function WasiThreadSetPriority(threadHandle : TThreadID; Prio: longint): boolean;

View File

@ -113,9 +113,10 @@ begin
{$IFDEF DEBUGWASMTHREADS}DebugWriteln('Thread '+IntToStr(ptruint(lthread))+' should be freed');{$ENDIF}
LThread.Free;
{$IFDEF DEBUGWASMTHREADS}DebugWriteln('Thread freed');{$ENDIF}
{$IFDEF DEBUGWASMTHREADS}DebugWriteln('Thread func calling EndThread');{$ENDIF}
EndThread(Result);
end;
{$IFDEF DEBUGWASMTHREADS}DebugWriteln('Thread func calling EndThread');{$ENDIF}
EndThread(Result);
end;
procedure TThread.SysCreate(CreateSuspended: Boolean; const StackSize: SizeUInt);
@ -195,6 +196,9 @@ begin
{$IFDEF DEBUGWASMTHREADS}DebugWriteln('TThread.SysDestroy: freeing fatal exception if it exists');{$ENDIF}
FFatalException.Free;
FFatalException := nil;
// Free resources associated with thread.
// This must be done after EndThread is called, but that is called in ThreadFunc
CloseThread(FHandle);
end;