]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
avoid premature _check_closed in _start_read
authorMin RK <benjaminrk@gmail.com>
Thu, 1 Aug 2019 11:53:56 +0000 (13:53 +0200)
committerBen Darnell <ben@bendarnell.com>
Sat, 1 Feb 2020 17:22:10 +0000 (12:22 -0500)
_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

tornado/iostream.py

index d8f390371c9377e00c95b53c3386dfe5c97c81ad..7b74a7e0638674b3bdff71c8c0abd7c9aa7f3e42 100644 (file)
@@ -789,8 +789,11 @@ class BaseIOStream(object):
             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