]> 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>
Mon, 2 Mar 2020 18:52:53 +0000 (13:52 -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 37aeb94f23d926894e91dcbcd80a7381ebeb0372..267a6c04b80907660033ffe4bbccd8d2d0212cc7 100644 (file)
@@ -799,8 +799,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