diff --git a/rtl/darwin/tthread.inc b/rtl/darwin/tthread.inc index cb538d2121..7171622275 100644 --- a/rtl/darwin/tthread.inc +++ b/rtl/darwin/tthread.inc @@ -176,7 +176,8 @@ begin LThread.Free; WRITE_DEBUG('Thread freed'); end; - WRITE_DEBUG('thread func exiting'); + WRITE_DEBUG('thread func calling EndThread'); + EndThread(Result); end; { TThread } diff --git a/rtl/freebsd/tthread.inc b/rtl/freebsd/tthread.inc index ccd35d252a..d7f560493c 100644 --- a/rtl/freebsd/tthread.inc +++ b/rtl/freebsd/tthread.inc @@ -181,7 +181,8 @@ begin LThread.Free; WRITE_DEBUG('Thread freed'); end; - WRITE_DEBUG('thread func exiting'); + WRITE_DEBUG('thread func calling EndThread'); + EndThread(Result); end; { TThread } diff --git a/rtl/linux/tthread.inc b/rtl/linux/tthread.inc index 639d17d741..6b766c13fb 100644 --- a/rtl/linux/tthread.inc +++ b/rtl/linux/tthread.inc @@ -181,7 +181,8 @@ begin LThread.Free; WRITE_DEBUG('Thread freed'); end; - WRITE_DEBUG('thread func exiting'); + WRITE_DEBUG('thread func calling EndThread'); + EndThread(Result); end; { TThread } diff --git a/rtl/morphos/tthread.inc b/rtl/morphos/tthread.inc index 9993e846f2..7adf61a51c 100644 --- a/rtl/morphos/tthread.inc +++ b/rtl/morphos/tthread.inc @@ -91,26 +91,6 @@ begin end; -function ThreadProc(Args: pointer): Integer; cdecl; -var - FreeThread: Boolean; - Thread: TThread absolute Args; -begin - try - Thread.Execute; - except - Thread.FFatalException := TObject(AcquireExceptionObject); - end; - FreeThread := Thread.FFreeOnTerminate; - Result := Thread.FReturnValue; - Thread.FFinished := True; - Thread.DoTerminate; - if FreeThread then Thread.Free; -{ - DosExit (deThread, Result); -} -end; - constructor TThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt = DefaultStackSize); var diff --git a/rtl/netbsd/tthread.inc b/rtl/netbsd/tthread.inc index 9e177dad58..f931670984 100644 --- a/rtl/netbsd/tthread.inc +++ b/rtl/netbsd/tthread.inc @@ -172,7 +172,8 @@ begin LThread.Free; WRITE_DEBUG('Thread freed'); end; - WRITE_DEBUG('thread func exiting'); + WRITE_DEBUG('thread func calling EndThread'); + EndThread(Result); end; { TThread } diff --git a/rtl/netware/tthread.inc b/rtl/netware/tthread.inc index e01d37d80b..753cfaef9f 100644 --- a/rtl/netware/tthread.inc +++ b/rtl/netware/tthread.inc @@ -125,30 +125,6 @@ begin end; -{ TThread } -function ThreadProc(args:pointer): Integer; -var - FreeThread: Boolean; - Thread : TThread absolute args; -begin - try - Thread.Execute; - except - Thread.FFatalException := TObject(AcquireExceptionObject); - end; - FreeThread := Thread.FFreeOnTerminate; - ThreadProc := Thread.FReturnValue; - Thread.FFinished := True; - Thread.DoTerminate; - if FreeThread then - begin - Thread.Destroy; - Thread.Free; - end; - EndThread(Result); -end; - - constructor TThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt = DefaultStackSize); var diff --git a/rtl/netwlibc/tthread.inc b/rtl/netwlibc/tthread.inc index a076b179e9..fc69960510 100644 --- a/rtl/netwlibc/tthread.inc +++ b/rtl/netwlibc/tthread.inc @@ -247,7 +247,8 @@ begin LThread.Free; WRITE_DEBUG('Thread freed'#13#10); end; - WRITE_DEBUG('thread func exiting'#13#10); + WRITE_DEBUG('thread func calling EndThread'#13#10); + EndThread(Result); end; { TThread } diff --git a/rtl/openbsd/tthread.inc b/rtl/openbsd/tthread.inc index dc3e7a609c..b500aea433 100644 --- a/rtl/openbsd/tthread.inc +++ b/rtl/openbsd/tthread.inc @@ -182,7 +182,8 @@ begin LThread.Free; WRITE_DEBUG('Thread freed'); end; - WRITE_DEBUG('thread func exiting'); + WRITE_DEBUG('thread func calling EndThread'); + EndThread(Result); end; { TThread } diff --git a/rtl/os2/tthread.inc b/rtl/os2/tthread.inc index 22b40cc2ec..bde5735d0e 100644 --- a/rtl/os2/tthread.inc +++ b/rtl/os2/tthread.inc @@ -155,24 +155,6 @@ begin end; -function ThreadProc(Args: pointer): Integer; cdecl; -var - FreeThread: Boolean; - Thread: TThread absolute Args; -begin - try - Thread.Execute; - except - Thread.FFatalException := TObject(AcquireExceptionObject); - end; - FreeThread := Thread.FFreeOnTerminate; - Result := Thread.FReturnValue; - Thread.FFinished := True; - Thread.DoTerminate; - if FreeThread then Thread.Free; - DosExit (deThread, Result); -end; - constructor TThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt = DefaultStackSize); var diff --git a/rtl/win32/tthread.inc b/rtl/win32/tthread.inc index 0b4c460405..38556d5e18 100644 --- a/rtl/win32/tthread.inc +++ b/rtl/win32/tthread.inc @@ -97,23 +97,6 @@ end; { TThread } -function ThreadProc(ThreadObjPtr: Pointer): Integer; -var - FreeThread: Boolean; - Thread: TThread absolute ThreadObjPtr; -begin - try - Thread.Execute; - except - Thread.FFatalException := TObject(AcquireExceptionObject); - end; - FreeThread := Thread.FFreeOnTerminate; - Result := Thread.FReturnValue; - Thread.FFinished := True; - Thread.DoTerminate; - if FreeThread then Thread.Free; -end; - constructor TThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt = DefaultStackSize); var