Add a guard for a closed sink before writing requests (#703)
diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md
index 58e69e9..ea6dfad 100644
--- a/dwds/CHANGELOG.md
+++ b/dwds/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.7.1-dev
+
+- Don't attempt to write a vm service request to a closed connection.
+ - Instead we log a warning with the attempted request message and return.
+
## 0.7.0
- `DWDS.start` now requires an `AssetHandler` instead of `applicationPort`,
diff --git a/dwds/lib/src/dwds_vm_client.dart b/dwds/lib/src/dwds_vm_client.dart
index 3931e2d..70f0bb1 100644
--- a/dwds/lib/src/dwds_vm_client.dart
+++ b/dwds/lib/src/dwds_vm_client.dart
@@ -5,11 +5,14 @@
import 'dart:async';
import 'dart:convert';
+import 'package:logging/logging.dart';
import 'package:vm_service/vm_service.dart';
import 'services/chrome_proxy_service.dart' show ChromeProxyService;
import 'services/debug_service.dart';
+final _logger = Logger('DwdsVmClient');
+
// A client of the vm service that registers some custom extensions like
// hotRestart.
class DwdsVmClient {
@@ -31,10 +34,16 @@
var responseController = StreamController<Map<String, Object>>();
VmServerConnection(requestController.stream, responseController.sink,
debugService.serviceExtensionRegistry, debugService.chromeProxyService);
- var client = VmService(
- responseController.stream.map(jsonEncode),
- (request) => requestController.sink
- .add(jsonDecode(request) as Map<String, dynamic>));
+ var client =
+ VmService(responseController.stream.map(jsonEncode), (request) {
+ if (requestController.isClosed) {
+ _logger.warning(
+ 'Attempted to send a request but the connection is closed:\n\n'
+ '$request');
+ return;
+ }
+ requestController.sink.add(jsonDecode(request) as Map<String, dynamic>);
+ });
var chromeProxyService =
debugService.chromeProxyService as ChromeProxyService;
diff --git a/dwds/pubspec.yaml b/dwds/pubspec.yaml
index 563faab..6a41efe 100644
--- a/dwds/pubspec.yaml
+++ b/dwds/pubspec.yaml
@@ -1,5 +1,5 @@
name: dwds
-version: 0.7.0
+version: 0.7.1-dev
author: Dart Team <misc@dartlang.org>
homepage: https://github.com/dart-lang/webdev/tree/master/dwds
description: >-