Index: runtime/observatory/lib/src/service/object.dart |
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart |
index a519ed9d32df14f9642a4a23e1b844650f619a1d..8a7f92cc06513bf69d89aa8d792f1724a09d3983 100644 |
--- a/runtime/observatory/lib/src/service/object.dart |
+++ b/runtime/observatory/lib/src/service/object.dart |
@@ -589,6 +589,8 @@ class _EventStreamState { |
// No new listeners showed up during cancelation. |
_onDone(); |
} |
+ }).catchError((e) { |
+ /* ignore */ |
}); |
} |
// No need to wait for _cancelFuture here. |
@@ -601,12 +603,16 @@ class _EventStreamState { |
onCancel:() => _cancelController(controller)); |
_controllers.add(controller); |
if (_cancelFuture != null) { |
- await _cancelFuture; |
+ try { |
+ await _cancelFuture; |
+ } on NetworkRpcException catch (_) { /* ignore */ } |
} |
if (_listenFuture == null) { |
_listenFuture = _vm._streamListen(streamId); |
} |
- await _listenFuture; |
+ try { |
+ await _listenFuture; |
+ } on NetworkRpcException catch (_) { /* ignore */ } |
return controller.stream; |
} |
@@ -624,6 +630,7 @@ abstract class VM extends ServiceObjectOwner implements M.VM { |
// TODO(turnidge): The connection should not be stored in the VM object. |
bool get isDisconnected; |
+ bool get isConnected; |
// Used for verbose logging. |
bool verbose = false; |
@@ -813,6 +820,8 @@ abstract class VM extends ServiceObjectOwner implements M.VM { |
_cache.putIfAbsent(objId, () => obj); |
} |
return obj; |
+ }).catchError((e) { |
+ return new Future.error(e); |
}); |
} |
@@ -838,6 +847,8 @@ abstract class VM extends ServiceObjectOwner implements M.VM { |
await listenEventStream(_kGraphStream, _dispatchEventToIsolate); |
} on FakeVMRpcException catch (_) { |
// ignore FakeVMRpcExceptions here. |
+ } on NetworkRpcException catch (_) { |
+ // ignore network errors here. |
} |
} |
return await invokeRpcNoUpgrade('getVM', {}); |
@@ -855,14 +866,24 @@ abstract class VM extends ServiceObjectOwner implements M.VM { |
Map params = { |
'streamId': streamId, |
}; |
- return invokeRpc('streamListen', params); |
+ return invokeRpc('streamListen', params).catchError((e) { |
+ // Ignore network errors on stream listen. |
+ if (e is NetworkRpcException) { |
+ return null; |
+ } |
+ }); |
} |
Future<ServiceObject> _streamCancel(String streamId) { |
Map params = { |
'streamId': streamId, |
}; |
- return invokeRpc('streamCancel', params); |
+ return invokeRpc('streamCancel', params).catchError((e) { |
+ // Ignore network errors on stream cancel. |
+ if (e is NetworkRpcException) { |
+ return null; |
+ } |
+ }); |
} |
// A map from stream id to event stream state. |
@@ -883,7 +904,8 @@ abstract class VM extends ServiceObjectOwner implements M.VM { |
var eventStream = _eventStreams.putIfAbsent( |
streamId, () => new _EventStreamState( |
this, streamId, () => _eventStreams.remove(streamId))); |
- return eventStream.addStream(); |
+ Stream stream = await eventStream.addStream(); |
+ return stream; |
} |
/// Helper function for listening to an event stream. |
@@ -987,6 +1009,7 @@ class FakeVM extends VM { |
_onConnect = new Future.value(this); |
return _onConnect; |
} |
+ bool get isConnected => !isDisconnected; |
// Only complete when requested. |
Completer _onDisconnect = new Completer(); |
Future get onDisconnect => _onDisconnect.future; |