Unverified Commit c0d5fd23 authored by Dan Field's avatar Dan Field Committed by GitHub

Handle notification errors (#31868)

parent 5e77d650
...@@ -934,9 +934,18 @@ void restoreVmServiceConnectFunction() { ...@@ -934,9 +934,18 @@ void restoreVmServiceConnectFunction() {
} }
void _unhandledJsonRpcError(dynamic error, dynamic stack) { void _unhandledJsonRpcError(dynamic error, dynamic stack) {
if (error is rpc.RpcException) {
final rpc.RpcException rpcException = error;
if (rpcException.data != null && rpcException.data['id'] == null) {
// This can happen, e.g., if a client tries to call us before methods have
// been registered, but the client doesn't care for a response.
_log.trace('RPC client sent a notification that resulted in an error:\n$error');
return;
}
assert(false, 'json_rpc_2 failed to send an exception back to the client.');
}
_log.trace('Unhandled RPC error:\n$error\n$stack'); _log.trace('Unhandled RPC error:\n$error\n$stack');
// TODO(dnfield): https://github.com/flutter/flutter/issues/31813 assert(false);
// assert(false);
} }
/// Waits for a real Dart VM service to become available, then connects using /// Waits for a real Dart VM service to become available, then connects using
......
...@@ -237,6 +237,16 @@ class VMService { ...@@ -237,6 +237,16 @@ class VMService {
} }
static void _unhandledError(dynamic error, dynamic stack) { static void _unhandledError(dynamic error, dynamic stack) {
if (error is rpc.RpcException) {
final rpc.RpcException rpcException = error;
if (rpcException.data != null && rpcException.data['id'] == null) {
// This can happen, e.g., if a client tries to call us before methods have
// been registered, but the client doesn't care for a response.
logger.printTrace('RPC client sent a notification that resulted in an error:\n$error');
return;
}
assert(false, 'json_rpc_2 failed to send an exception back to the client.');
}
logger.printTrace('Error in internal implementation of JSON RPC.\n$error\n$stack'); logger.printTrace('Error in internal implementation of JSON RPC.\n$error\n$stack');
assert(false); assert(false);
} }
......
...@@ -33,6 +33,14 @@ RpcPeerConnectionFunction fuchsiaVmServiceConnectionFunction = _waitAndConnect; ...@@ -33,6 +33,14 @@ RpcPeerConnectionFunction fuchsiaVmServiceConnectionFunction = _waitAndConnect;
void _unhandledJsonRpcError(dynamic error, dynamic stack) { void _unhandledJsonRpcError(dynamic error, dynamic stack) {
if (error is json_rpc.RpcException) {
final json_rpc.RpcException rpcException = error;
if (rpcException.data != null && rpcException.data['id'] == null) {
// This can happen, e.g., if a client tries to call us before methods have
// been registered, but the client doesn't care for a response.
return;
}
}
_log.fine('Error in internalimplementation of JSON RPC.\n$error\n$stack'); _log.fine('Error in internalimplementation of JSON RPC.\n$error\n$stack');
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment