]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Fix another case in which streaming read_until_close passed data to the final callback.
authorBen Darnell <ben@bendarnell.com>
Wed, 1 May 2013 03:01:54 +0000 (23:01 -0400)
committerBen Darnell <ben@bendarnell.com>
Wed, 1 May 2013 03:01:54 +0000 (23:01 -0400)
Closes #774.

tornado/iostream.py
tornado/test/iostream_test.py

index b84d17734c8fbf4d35f94db1ae3466d9a53e163c..5b4a45f9cd380b7d0f297f7db08e6cff839ae93a 100644 (file)
@@ -234,6 +234,10 @@ class BaseIOStream(object):
                 if any(exc_info):
                     self.error = exc_info[1]
             if self._read_until_close:
+                if (self._streaming_callback is not None and
+                    self._read_buffer_size):
+                    self._run_callback(self._streaming_callback,
+                                       self._consume(self._read_buffer_size))
                 callback = self._read_callback
                 self._read_callback = None
                 self._read_until_close = False
index 138282dc7a25b3cbec18ab622ac67235f5be1436..9972c843d233280417b11c72cd53d7258d1f178c 100644 (file)
@@ -261,19 +261,24 @@ class TestIOStreamMixin(object):
         server, client = self.make_iostream_pair()
         try:
             chunks = []
+            closed = [False]
 
-            def callback(data):
+            def streaming_callback(data):
                 chunks.append(data)
                 self.stop()
-            client.read_until_close(callback=callback,
-                                    streaming_callback=callback)
+            def close_callback(data):
+                assert not data, data
+                closed[0] = True
+                self.stop()
+            client.read_until_close(callback=close_callback,
+                                    streaming_callback=streaming_callback)
             server.write(b"1234")
-            self.wait()
-            server.write(b"5678")
+            self.wait(condition=lambda: len(chunks) == 1)
+            server.write(b"5678", self.stop)
             self.wait()
             server.close()
-            self.wait()
-            self.assertEqual(chunks, [b"1234", b"5678", b""])
+            self.wait(condition=lambda: closed[0])
+            self.assertEqual(chunks, [b"1234", b"5678"])
         finally:
             server.close()
             client.close()