diff --git a/pkgs/coverage/lib/src/isolate_paused_listener.dart b/pkgs/coverage/lib/src/isolate_paused_listener.dart index c1b56c223..f679e240a 100644 --- a/pkgs/coverage/lib/src/isolate_paused_listener.dart +++ b/pkgs/coverage/lib/src/isolate_paused_listener.dart @@ -105,7 +105,20 @@ class IsolatePausedListener { _oldCollectionTasks.remove(collectionTask); group.exit(isolateRef); if (!_finishedListening) { - await _service.resume(isolateRef.id!); + try { + await _service.resume(isolateRef.id!); + } on SentinelException catch (_) { + } on RPCError catch (e) { + // Ignore expected VM service RPC errors when resuming an isolate + // that has already completed or exited: + // - 105: IsolateExited (isolate has exited) + // - 106: IsolateMustBePaused / CannotResume (isolate cannot be resumed) + const isolateExited = 105; + const isolateMustBePaused = 106; + if (e.code != isolateExited && e.code != isolateMustBePaused) { + rethrow; + } + } } } } diff --git a/pkgs/coverage/test/lcov_test.dart b/pkgs/coverage/test/lcov_test.dart index a03612c7e..4770de421 100644 --- a/pkgs/coverage/test/lcov_test.dart +++ b/pkgs/coverage/test/lcov_test.dart @@ -337,7 +337,11 @@ void main() { }); } -Future> _getHitMap() async { +Future>? _hitMapFuture; + +Future> _getHitMap() => _hitMapFuture ??= _createHitMap(); + +Future> _createHitMap() async { expect(FileSystemEntity.isFileSync(_sampleAppPath), isTrue); // start sample app.