void check_pending_events()
{
SingleSteppingEngine[] list = new SingleSteppingEngine [pending_events.Count];
pending_events.Keys.CopyTo (list, 0);
for (int i = 0; i < list.Length; i++) {
SingleSteppingEngine engine = list [i];
if (engine.Process.HasThreadLock)
continue;
Inferior.ChildEvent cevent = (Inferior.ChildEvent) pending_events [engine];
pending_events.Remove (engine);
try {
Report.Debug (DebugFlags.Wait,
"ThreadManager {0} process pending event: {1} {2}",
DebuggerWaitHandle.CurrentThread, engine, cevent);
engine.ReleaseThreadLock (cevent);
Report.Debug (DebugFlags.Wait,
"ThreadManager {0} process pending event done: {1}",
DebuggerWaitHandle.CurrentThread, engine);
} catch (ST.ThreadAbortException) {
;
} catch (Exception e) {
Report.Debug (DebugFlags.Wait,
"ThreadManager caught exception: {0}", e);
}
}
}