"""
assert isinstance(data, bytes_type)
self._check_closed()
- self._write_buffer.append(data)
+ if data:
+ # We use bool(_write_buffer) as a proxy for write_buffer_size>0,
+ # so never put empty strings in the buffer.
+ self._write_buffer.append(data)
self._write_callback = stack_context.wrap(callback)
self._handle_write()
if self._write_buffer:
from tornado import netutil
+from tornado.ioloop import IOLoop
from tornado.iostream import IOStream
from tornado.testing import AsyncHTTPTestCase, LogTrapTestCase, get_unused_port
from tornado.util import b
data = self.wait()
self.assertEqual(data, b("200"))
+ def test_write_zero_bytes(self):
+ # Attempting to write zero bytes should run the callback without
+ # going into an infinite loop.
+ server, client = self.make_iostream_pair()
+ server.write(b(''), callback=self.stop)
+ self.wait()
+ # As a side effect, the stream is now listening for connection
+ # close (if it wasn't already), but is not listening for writes
+ self.assertEqual(server._state, IOLoop.READ|IOLoop.ERROR)
+
def test_connection_refused(self):
# When a connection is refused, the connect callback should not
# be run. (The kqueue IOLoop used to behave differently from the