Browse Source

Fixed unit test: Eliminated WaitHandles from process

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2207 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
e4f3e42ee1
  1. 21
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/MTA2STA.cs
  2. 24
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Process-StateControl.cs
  3. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs
  4. 8
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

21
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/MTA2STA.cs

@ -42,7 +42,18 @@ namespace Debugger.Interop @@ -42,7 +42,18 @@ namespace Debugger.Interop
}
}
void PerformAllCalls()
/// <summary>
/// Wait until a call a made
/// </summary>
public void WaitForCall()
{
pendingCallsNotEmpty.WaitOne();
}
/// <summary>
/// Performs all waiting calls on the current thread
/// </summary>
public void PerformAllCalls()
{
while (true) {
MethodInvoker nextMethod;
@ -92,14 +103,6 @@ namespace Debugger.Interop @@ -92,14 +103,6 @@ namespace Debugger.Interop
}
}
/// <summary>
/// Performs all waiting calls on the current thread
/// </summary>
public void Pulse()
{
PerformAllCalls();
}
/// <summary>
/// Schedules invocation of method and returns immediately
/// </summary>

24
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Process-StateControl.cs

@ -13,8 +13,6 @@ namespace Debugger @@ -13,8 +13,6 @@ namespace Debugger
public partial class Process
{
bool pauseOnHandledException = false;
ManualResetEvent exited = new ManualResetEvent(false);
ManualResetEvent pausedHandle = new ManualResetEvent(false);
DebugeeState debugeeState;
@ -125,10 +123,6 @@ namespace Debugger @@ -125,10 +123,6 @@ namespace Debugger
this.Continue();
}
}
// Debugger state is unknown after calling OnDebuggingPaused (it may be resumed)
if (IsPaused) {
pausedHandle.Set();
}
}
/// <summary>
@ -137,9 +131,11 @@ namespace Debugger @@ -137,9 +131,11 @@ namespace Debugger
/// </summary>
public void WaitForPause()
{
if (debugger.MTA2STA.SoftWait(PausedHandle, exited) == 1) {
throw new DebuggerException("Process exited before pausing");
while(this.IsRunning && !this.HasExpired) {
debugger.MTA2STA.WaitForCall();
debugger.MTA2STA.PerformAllCalls();
}
if (this.HasExpired) throw new DebuggerException("Process exited before pausing");
}
/// <summary>
@ -147,15 +143,9 @@ namespace Debugger @@ -147,15 +143,9 @@ namespace Debugger
/// </summary>
public void WaitForExit()
{
debugger.MTA2STA.SoftWait(exited);
}
/// <summary>
/// Wait handle, which will be set as long as the debugger is paused
/// </summary>
public WaitHandle PausedHandle {
get {
return pausedHandle;
while(!this.HasExpired) {
debugger.MTA2STA.WaitForCall();
debugger.MTA2STA.PerformAllCalls();
}
}

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs

@ -41,7 +41,6 @@ namespace Debugger @@ -41,7 +41,6 @@ namespace Debugger
if (Expired != null) {
Expired(this, new ProcessEventArgs(this));
}
exited.Set();
debugger.RemoveProcess(this);
}
}
@ -161,7 +160,6 @@ namespace Debugger @@ -161,7 +160,6 @@ namespace Debugger
pauseSession.NotifyHasExpired();
pauseSession = null;
OnDebuggingResumed();
pausedHandle.Reset();
corProcess.Continue(0);
}

8
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -55,10 +55,10 @@ namespace Debugger.Tests @@ -55,10 +55,10 @@ namespace Debugger.Tests
[TearDown]
public void TearDown()
{
// foreach(Process process in debugger.Processes) {
// process.Terminate();
// process.WaitForExit();
// }
while(debugger.Processes.Count > 0) {
debugger.Processes[0].Terminate();
debugger.Processes[0].WaitForExit();
}
}
void StartProgram(string programName)

Loading…
Cancel
Save