Browse Source

* fixed leaking of TThread

git-svn-id: trunk@3519 -
florian 19 years ago
parent
commit
33baacbe04

+ 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

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

+ 0 - 1
rtl/win/systhrd.inc

@@ -112,7 +112,6 @@ CONST
       end;
 
 
-
 {*****************************************************************************
                             Thread starting
 *****************************************************************************}

+ 4 - 22
rtl/win/tthread.inc

@@ -85,34 +85,15 @@ procedure AddThread;
 begin
   if ThreadCount = 0 then
     ThreadWindow := AllocateWindow;
-  Inc(ThreadCount);
+  InterlockedIncrement(ThreadCount);
 end;
 
 procedure RemoveThread;
 begin
-  Dec(ThreadCount);
-  if ThreadCount = 0 then
+  if InterlockedDecrement(ThreadCount)=0 then
     PostMessage(ThreadWindow, CM_DESTROYWINDOW, 0, 0);
 end;
 
-{ TThread }
-
-function ThreadProc(ThreadObjPtr: Pointer): PtrInt;
-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);
@@ -182,7 +163,8 @@ procedure TThread.SetSuspended(Value: Boolean);
 begin
   if Value <> FSuspended then
     if Value then
-      Suspend else
+      Suspend
+    else
       Resume;
 end;
 

+ 0 - 17
rtl/wince/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
   Flags: Integer;