void start_wait_thread()
{
Report.Debug (DebugFlags.Threads, "Wait thread started: {0}",
DebuggerWaitHandle.CurrentThread);
//
// NOTE: Dispose() intentionally uses
// wait_thread.Abort ();
// wait_thread.Join ();
//
// The Thread.Abort() is neccessary since we may be blocked in a
// waitpid(). In this case, the thread abort signal which is sent
// to the current thread will make the waitpid() abort with an EINTR,
// so we're not deadlocking here.
//
try {
while (wait_thread_main ())
;
} catch (ST.ThreadAbortException) {
Report.Debug (DebugFlags.Threads, "Wait thread abort: {0}",
DebuggerWaitHandle.CurrentThread);
ST.Thread.ResetAbort ();
} catch (Exception ex) {
Report.Debug (DebugFlags.Threads, "FUCK: {0}", ex);
throw;
}
Report.Debug (DebugFlags.Threads, "Wait thread exiting: {0}",
DebuggerWaitHandle.CurrentThread);
}