internal override void SuspendUserThread()
{
if (!ThreadManager.InBackgroundThread)
throw new InternalError ();
if (HasThreadLock)
throw new InternalError ("Recursive thread lock");
Report.Debug (DebugFlags.Threads,
"{0} suspend user thread: {1} {2}",
this, engine_stopped, current_operation);
if (engine_stopped)
return;
Inferior.ChildEvent stop_event;
bool stopped = inferior.Stop (out stop_event);
stop_requested = true;
if (stop_event != null) {
if (ProcessEvent (stop_event))
stop_event = null;
} else {
OperationInterrupted ();
}
if (stop_event != null)
thread_lock = new ThreadLockData (stopped, stop_event, false);
Report.Debug (DebugFlags.Threads,
"{0} suspend user thread done: {1} {2} {3}",
this, stopped, stop_event, current_operation);
}