From b30d1d7366c0593173d7ba9166d13dea1424a425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Mon, 23 Jun 2008 16:27:38 +0000 Subject: [PATCH] Thread now has only one terminating event: Thread.Exited git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3131 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Pads/RunningThreadsPad.cs | 2 +- .../Project/Src/Control/Process-Threads.cs | 4 +- .../Project/Src/Control/Thread.cs | 64 ++++++------------- .../Project/Src/Internal/ManagedCallback.cs | 2 +- .../Src/TestPrograms/MainThreadExit.cs | 26 ++++---- 5 files changed, 37 insertions(+), 61 deletions(-) diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs index 86a0596846..4d7d1f39fd 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs @@ -164,7 +164,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads thread.NameChanged += delegate { RefreshThread(thread); }; - thread.Expired += delegate { + thread.Exited += delegate { RemoveThread(thread); }; } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Threads.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Threads.cs index a92b027b67..002f65e20c 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Threads.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Threads.cs @@ -39,7 +39,7 @@ namespace Debugger get { List threads = new List(); foreach(Thread thread in threadCollection) { - if (!thread.HasExpired) { + if (!thread.HasExited) { threads.Add(thread); } } @@ -64,7 +64,7 @@ namespace Debugger threadCollection.Add(thread); OnThreadStarted(thread); - thread.NativeThreadExited += delegate { + thread.Exited += delegate { threadCollection.Remove(thread); }; } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs index f5525a047a..0ad35b6998 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Thread.cs @@ -21,41 +21,33 @@ namespace Debugger uint id; ICorDebugThread corThread; + bool hasExited = false; List steppers = new List(); + StackFrame selectedStackFrame; + Exception currentException; DebuggeeState currentException_DebuggeeState; ExceptionType currentExceptionType; bool currentExceptionIsUnhandled; - bool hasExpired = false; - bool nativeThreadExited = false; - - StackFrame selectedStackFrame; - - public event EventHandler Expired; - public event EventHandler NativeThreadExited; public event EventHandler NameChanged; - - public bool HasExpired { - get { - return hasExpired; - } - } + public event EventHandler Exited; [Debugger.Tests.Ignore] public Process Process { - get { - return process; - } + get { return process; } } [Debugger.Tests.Ignore] public uint ID { - get{ - return id; - } + get{ return id; } + } + + public bool HasExited { + get { return hasExited; } + private set { hasExited = value; } } /// From time to time the thread may be in invalid state. @@ -76,8 +68,8 @@ namespace Debugger internal ICorDebugThread CorThread { get { - if (nativeThreadExited) { - throw new DebuggerException("Native thread has exited"); + if (hasExited) { + throw new DebuggerException("Thread has exited"); } return corThread; } @@ -90,37 +82,23 @@ namespace Debugger this.id = CorThread.ID; } - void Expire() + internal void NotifyExited() { - System.Diagnostics.Debug.Assert(!this.hasExpired); + if (this.hasExited) throw new DebuggerException("Already exited"); - process.TraceMessage("Thread " + this.ID + " expired"); - this.hasExpired = true; - OnExpired(new ThreadEventArgs(this)); + process.TraceMessage("Thread " + this.ID + " exited"); if (process.SelectedThread == this) { process.SelectedThread = null; } - } - - protected virtual void OnExpired(EventArgs e) - { - if (Expired != null) { - Expired(this, e); - } - } - - internal void NotifyNativeThreadExited() - { - if (!this.hasExpired) Expire(); - nativeThreadExited = true; - OnNativeThreadExited(new ThreadEventArgs(this)); + this.HasExited = true; + OnExited(new ThreadEventArgs(this)); } - protected virtual void OnNativeThreadExited(ThreadEventArgs e) + protected virtual void OnExited(ThreadEventArgs e) { - if (NativeThreadExited != null) { - NativeThreadExited(this, e); + if (Exited != null) { + Exited(this, e); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs index 24cd9cd013..509181a745 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs @@ -408,7 +408,7 @@ namespace Debugger // It seems that ICorDebugThread is still not dead and can be used EnterCallback(PausedReason.Other, "ExitThread " + pThread.ID, pThread); - process.GetThread(pThread).NotifyNativeThreadExited(); + process.GetThread(pThread).NotifyExited(); try { ExitCallback(); diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs index e3030afce0..6f491f364f 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/MainThreadExit.cs @@ -63,7 +63,7 @@ namespace Debugger.Tests { null False 0 - False + False True True False @@ -73,25 +73,24 @@ namespace Debugger.Tests { Debugger.Tests.TestPrograms.MainThreadExit.Main Normal - + ? = {System.Threading.Thread} Debugger.Tests.TestPrograms.MainThreadExit.Main False - + null False 0 - False + False False True False System.Threading.ThreadHelper.ThreadStart null - - + Worker thread System.Threading.ThreadHelper.ThreadStart Normal - + ? = {System.Threading.Thread} null False @@ -103,7 +102,7 @@ namespace Debugger.Tests { null False 0 - False + False False False False @@ -113,25 +112,24 @@ namespace Debugger.Tests { null Normal - + null False - + null False 0 - False + False True True False System.Threading.WaitHandle.WaitOne Debugger.Tests.TestPrograms.MainThreadExit.WaitForALongTime - - + Worker thread System.Threading.ThreadHelper.ThreadStart Normal - + ? = {System.Threading.Thread} Debugger.Tests.TestPrograms.MainThreadExit.WaitForALongTime False