bool disconnected;
+ internal ManualResetEvent DisconnectedEvent = new ManualResetEvent (false);
+
void receiver_thread_main () {
while (!closed) {
try {
lock (reply_packets_monitor) {
disconnected = true;
+ DisconnectedEvent.Set ();
Monitor.PulseAll (reply_packets_monitor);
TransportClose ();
}
{
closed = true;
disconnected = true;
+ DisconnectedEvent.Set ();
TransportClose ();
}
}
public StackFrame[] GetFrames () {
FetchFrames (true);
- fetchingEvent.WaitOne ();
+ if (WaitHandle.WaitAny (new []{ vm.conn.DisconnectedEvent, fetchingEvent }) == 0) {
+ throw new VMDisconnectedException ();
+ }
return frames;
}