_start_read can resolve with _try_inline_read, which can succeed even if the stream has been closed
if the buffer has been populated by a prior read
preserve the fix for asserts being hit when dealing with closed sockets
self._read_from_buffer(pos)
def _start_read(self) -> Future:
- self._check_closed() # Before reading, check that stream is not closed.
- assert self._read_future is None, "Already reading"
+ if self._read_future is not None:
+ # raise StreamClosedError instead of assert
+ # in case of starting a second read after the stream is closed
+ self._check_closed()
+ assert self._read_future is None, "Already reading"
self._read_future = Future()
return self._read_future