From 795ed3a012c1741ef9c94e2149273684758b03ba Mon Sep 17 00:00:00 2001 From: martin Date: Fri, 22 Jun 2018 17:47:52 +0000 Subject: [PATCH] cmd line debug / threads git-svn-id: trunk@58380 - --- .../cmdlinedebuggerbase/debugprocess.pas | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/components/lazdebuggers/cmdlinedebuggerbase/debugprocess.pas b/components/lazdebuggers/cmdlinedebuggerbase/debugprocess.pas index 623ef2b224..93ed9564ca 100644 --- a/components/lazdebuggers/cmdlinedebuggerbase/debugprocess.pas +++ b/components/lazdebuggers/cmdlinedebuggerbase/debugprocess.pas @@ -78,6 +78,7 @@ type {$ifNdef NATIVE_ASYNC_PROCESS} procedure ThreadDataAvail; procedure ThreadPipeError; + procedure TerminataThread; {$ENDIF} procedure FinishedReadingOutput; protected @@ -228,6 +229,15 @@ DebugLn(['got pipe err / is running ', Running]); Terminate(0); HandleProcessTermination(0, cerExit, 0); end; + +procedure TDebugAsyncProcess.TerminataThread; +begin + FReadThread.Terminate; + FinishedReadingOutput; + TThread.RemoveQueuedEvents(FReadThread, @ThreadDataAvail); + TThread.RemoveQueuedEvents(FReadThread, @ThreadPipeError); +end; + {$ENDIF} procedure TDebugAsyncProcess.HandlePipeInput(AData: PtrInt; @@ -257,10 +267,7 @@ begin RemovePipeEventHandler(FPipeHandler); {$ELSE} if FReadThread <> nil then begin - FReadThread.Terminate; - FinishedReadingOutput; - RemoveQueuedEvents(FReadThread, FOnDataAvail); - RemoveQueuedEvents(FReadThread, FOnPipeError); + TerminataThread; end; {$ENDIF} end; @@ -272,10 +279,7 @@ begin RemoveProcessEventHandler(FProcessHandler); {$ELSE} // should be enough in UnhookPipeHandle; if FReadThread <> nil then begin - FReadThread.Terminate; - FinishedReadingOutput; - RemoveQueuedEvents(FReadThread, FOnDataAvail); - RemoveQueuedEvents(FReadThread, FOnPipeError); + TerminataThread; end; {$ENDIF} end; @@ -305,10 +309,7 @@ begin UnhookPipeHandle; {$ELSE} if FReadThread <> nil then begin - FReadThread.Terminate; - FinishedReadingOutput; // make sure destroy will not wait forever - RemoveQueuedEvents(FReadThread, FOnDataAvail); - RemoveQueuedEvents(FReadThread, FOnPipeError); + TerminataThread; FReadThread.WaitFor; debugln(['DESTROY thread destroying']); FreeAndNil(FReadThread); @@ -325,10 +326,7 @@ begin UnhookPipeHandle; {$ELSE} if FReadThread <> nil then begin - FReadThread.Terminate; - FinishedReadingOutput; - RemoveQueuedEvents(FReadThread, FOnDataAvail); - RemoveQueuedEvents(FReadThread, FOnPipeError); + TerminataThread; FReadThread.WaitFor; debugln(['DESTROY thread destroying']); FreeAndNil(FReadThread);