Quellcode durchsuchen

Merged revisions 3519 via svnmerge from
http://svn.freepascal.org/svn/fpc/trunk

r3519 (florian)
* fixed leaking of TThread

git-svn-id: branches/fixes_2_0@3521 -

florian vor 19 Jahren
Ursprung
Commit
f5b758aa35

+ 2 - 1
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 }

+ 2 - 1
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 }

+ 2 - 1
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 }

+ 0 - 20
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

+ 2 - 1
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 }

+ 0 - 24
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

+ 2 - 1
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 }

+ 2 - 1
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 }

+ 0 - 18
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

+ 0 - 17
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