[flutter_tools] flutter daemon handles a closed stdout IOSink (#105075)

This commit is contained in:
Christopher Fujino
2022-06-01 10:08:13 -07:00
committed by GitHub
parent feda45a51b
commit ac791adbc0
2 changed files with 18 additions and 0 deletions

View File

@@ -219,6 +219,10 @@ class DaemonStreams {
if (binary != null) {
_outputSink.add(binary);
}
} on StateError catch (error) {
_logger.printError('Failed to write daemon command response: $error');
// Failed to send, close the connection
_outputSink.close();
} on IOException catch (error) {
_logger.printError('Failed to write daemon command response: $error');
// Failed to send, close the connection

View File

@@ -364,6 +364,20 @@ void main() {
await daemonStreams.dispose();
expect(outputStream.isClosed, true);
});
testWithoutContext('handles sending to a closed sink', () async {
// Unless the stream is listened to, the call to .close() will never
// complete
outputStream.stream.listen((List<int> _) {});
await outputStream.sink.close();
daemonStreams.send(testCommand);
expect(
bufferLogger.errorText,
contains(
'Failed to write daemon command response: Bad state: Cannot add event after closing',
),
);
});
});
}