private void InnerPause(HaltArguments haltArgs)
{
if(isAborted || PauseEvent.WaitOne(0))
{
// cpu is already paused or aborted
return;
}
lock(pauseLock)
{
PauseEvent.Set();
TlibSetPaused();
if(Thread.CurrentThread.ManagedThreadId != cpuThread.ManagedThreadId)
{
this.NoisyLog("Waiting for thread to pause.");
sync.Pass();
cpuThread.Join();
this.NoisyLog("Paused.");
cpuThread = null;
TlibClearPaused();
}
else
{
pauseGuard.OrderPause();
}
}
InvokeHalted(haltArgs);
}