]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Call the WebSocketHandler.on_close method regardless of which side closed.
authorBen Darnell <ben@bendarnell.com>
Mon, 19 Jan 2015 01:40:09 +0000 (20:40 -0500)
committerBen Darnell <ben@bendarnell.com>
Mon, 19 Jan 2015 01:40:09 +0000 (20:40 -0500)
Closes #1173.

tornado/test/websocket_test.py
tornado/websocket.py

index e1e3ea7005d1c396a9f47dcdb65daf4c2fd1aec6..443ad8758a853c317eed4802a763e0ae83599ea2 100644 (file)
@@ -75,6 +75,7 @@ class NonWebSocketHandler(RequestHandler):
 
 class CloseReasonHandler(TestWebSocketHandler):
     def open(self):
+        self.on_close_called = False
         self.close(1001, "goodbye")
 
 
@@ -221,6 +222,8 @@ class WebSocketTest(WebSocketBaseTestCase):
         self.assertIs(msg, None)
         self.assertEqual(ws.close_code, 1001)
         self.assertEqual(ws.close_reason, "goodbye")
+        # The on_close callback is called no matter which side closed.
+        yield self.close_future
 
     @gen_test
     def test_client_close_reason(self):
index f1188088737c5990806cb7ce423e6bccb8fc45df..5c1bab4e3bbc9097e80b2a6178ef4fb57d735db3 100644 (file)
@@ -129,6 +129,7 @@ class WebSocketHandler(tornado.web.RequestHandler):
         self.close_code = None
         self.close_reason = None
         self.stream = None
+        self._on_close_called = False
 
     @tornado.web.asynchronous
     def get(self, *args, **kwargs):
@@ -350,6 +351,8 @@ class WebSocketHandler(tornado.web.RequestHandler):
         if self.ws_connection:
             self.ws_connection.on_connection_close()
             self.ws_connection = None
+        if not self._on_close_called:
+            self._on_close_called
             self.on_close()
 
     def send_error(self, *args, **kwargs):