[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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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',
),
);
});
});
}