Skip to content

Commit 1136d51

Browse files
authored
Catch exceptions in unawaited Futures (#1938)
1 parent 2cad786 commit 1136d51

13 files changed

+180
-140
lines changed

dwds/lib/shared/batched_stream.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'dart:async';
66
import 'package:async/async.dart';
7+
import 'package:dwds/src/utilities/shared.dart';
78

89
/// Stream controller allowing to batch events.
910
class BatchedStreamController<T> {
@@ -28,7 +29,7 @@ class BatchedStreamController<T> {
2829
_inputController = StreamController<T>(),
2930
_outputController = StreamController<List<T>>() {
3031
_inputQueue = StreamQueue<T>(_inputController.stream);
31-
unawaited(_batchAndSendEvents());
32+
safeUnawaited(_batchAndSendEvents());
3233
}
3334

3435
/// Sink collecting events.
@@ -39,7 +40,7 @@ class BatchedStreamController<T> {
3940

4041
/// Close the controller.
4142
Future<dynamic> close() async {
42-
unawaited(_inputController.close());
43+
safeUnawaited(_inputController.close());
4344
return _completer.future.then((value) => _outputController.close());
4445
}
4546

dwds/lib/src/connections/app_connection.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:dwds/data/connect_request.dart';
99
import 'package:dwds/data/run_request.dart';
1010
import 'package:dwds/data/serializers.dart';
1111
import 'package:dwds/src/handlers/socket_connections.dart';
12+
import 'package:dwds/src/utilities/shared.dart';
1213

1314
/// A connection between the application loaded in the browser and DWDS.
1415
class AppConnection {
@@ -19,7 +20,7 @@ class AppConnection {
1920
final SocketConnection _connection;
2021

2122
AppConnection(this.request, this._connection) {
22-
unawaited(_connection.sink.done.then((v) => _doneCompleter.complete()));
23+
safeUnawaited(_connection.sink.done.then((v) => _doneCompleter.complete()));
2324
}
2425

2526
bool get isInKeepAlivePeriod => _connection.isInKeepAlivePeriod;

dwds/lib/src/debugging/debugger.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'package:dwds/src/utilities/conversions.dart';
1616
import 'package:dwds/src/utilities/dart_uri.dart';
1717
import 'package:dwds/src/utilities/domain.dart';
1818
import 'package:dwds/src/utilities/objects.dart' show Property;
19+
import 'package:dwds/src/utilities/server.dart';
1920
import 'package:dwds/src/utilities/shared.dart';
2021
import 'package:dwds/src/utilities/synchronized.dart';
2122
import 'package:logging/logging.dart';

dwds/lib/src/debugging/inspector.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'package:dwds/src/readers/asset_reader.dart';
1717
import 'package:dwds/src/utilities/conversions.dart';
1818
import 'package:dwds/src/utilities/dart_uri.dart';
1919
import 'package:dwds/src/utilities/domain.dart';
20+
import 'package:dwds/src/utilities/server.dart';
2021
import 'package:dwds/src/utilities/shared.dart';
2122
import 'package:logging/logging.dart';
2223
import 'package:vm_service/vm_service.dart';

dwds/lib/src/debugging/metadata/function.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import 'package:dwds/src/debugging/remote_debugger.dart';
66
import 'package:dwds/src/loaders/strategy.dart';
7-
import 'package:dwds/src/utilities/shared.dart';
7+
import 'package:dwds/src/utilities/server.dart';
88
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
99

1010
/// Meta data for a remote Dart function in Chrome.

dwds/lib/src/handlers/dev_handler.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import 'package:dwds/src/servers/extension_backend.dart';
3131
import 'package:dwds/src/services/app_debug_services.dart';
3232
import 'package:dwds/src/services/debug_service.dart';
3333
import 'package:dwds/src/services/expression_compiler.dart';
34+
import 'package:dwds/src/utilities/shared.dart';
3435
import 'package:logging/logging.dart';
3536
import 'package:shelf/shelf.dart';
3637
import 'package:sse/server/sse_handler.dart';
@@ -159,7 +160,7 @@ class DevHandler {
159160
.takeUntilGap(const Duration(milliseconds: 50));
160161
// We enqueue this work as we need to begin listening (`.hasNext`)
161162
// before events are received.
162-
unawaited(Future.microtask(() => connection.runtime.enable()));
163+
safeUnawaited(Future.microtask(() => connection.runtime.enable()));
163164

164165
await for (var contextId in contextIds) {
165166
final result = await connection.sendCommand('Runtime.evaluate', {
@@ -175,7 +176,7 @@ class DevHandler {
175176
}
176177
}
177178
if (appTab != null) break;
178-
unawaited(connection.close());
179+
safeUnawaited(connection.close());
179180
}
180181
if (appTab == null || tabConnection == null || executionContext == null) {
181182
throw AppConnectionException(
@@ -234,7 +235,7 @@ class DevHandler {
234235
await _chromeConnection(), appConnection);
235236
appServices = await _createAppDebugServices(
236237
appConnection.request.appId, debugService);
237-
unawaited(appServices.chromeProxyService.remoteDebugger.onClose.first
238+
safeUnawaited(appServices.chromeProxyService.remoteDebugger.onClose.first
238239
.whenComplete(() async {
239240
await appServices?.close();
240241
_servicesByAppId.remove(appConnection.request.appId);
@@ -301,7 +302,7 @@ class DevHandler {
301302
}
302303
});
303304

304-
unawaited(injectedConnection.sink.done.then((_) async {
305+
safeUnawaited(injectedConnection.sink.done.then((_) async {
305306
_injectedConnections.remove(injectedConnection);
306307
final connection = appConnection;
307308
if (connection != null) {
@@ -533,7 +534,8 @@ class DevHandler {
533534
);
534535
final encodedUri = await debugService.encodedUri;
535536
extensionDebugger.sendEvent('dwds.encodedUri', encodedUri);
536-
unawaited(appServices.chromeProxyService.remoteDebugger.onClose.first
537+
safeUnawaited(appServices
538+
.chromeProxyService.remoteDebugger.onClose.first
537539
.whenComplete(() async {
538540
appServices?.chromeProxyService.destroyIsolate();
539541
await appServices?.close();

0 commit comments

Comments
 (0)