]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Check if the stream is closed before writing final websocket close packet.
authorBen Darnell <ben@bendarnell.com>
Sat, 21 Jan 2012 23:58:35 +0000 (15:58 -0800)
committerBen Darnell <ben@bendarnell.com>
Sun, 22 Jan 2012 00:02:28 +0000 (16:02 -0800)
Closes #390.

tornado/websocket.py

index ca0096322e3155ca5ae6bfe3a8e9760827b7bdda..b5b742c8cdb7f134a6502077b4baa93341dcd363 100644 (file)
@@ -387,8 +387,9 @@ class WebSocketProtocol76(WebSocketProtocol):
         """Closes the WebSocket connection."""
         if self.client_terminated and self._waiting:
             tornado.ioloop.IOLoop.instance().remove_timeout(self._waiting)
+            self._waiting = None
             self.stream.close()
-        else:
+        elif not self.stream.closed():
             self.stream.write("\xff\x00")
             self._waiting = tornado.ioloop.IOLoop.instance().add_timeout(
                                 time.time() + 5, self._abort)
@@ -603,6 +604,7 @@ class WebSocketProtocol13(WebSocketProtocol):
 
     def close(self):
         """Closes the WebSocket connection."""
+        if self.stream.closed(): return
         self._write_frame(True, 0x8, b(""))
         self._started_closing_handshake = True
         self._waiting = tornado.ioloop.IOLoop.instance().add_timeout(time.time() + 5, self._abort)