From 34ea8ae43c507cb5a8f8883274115bd3ef1b94a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Labate?= Date: Tue, 25 Jun 2019 09:51:34 +0200 Subject: [PATCH] Fixes #403 v2 : yield infinite lock (#413) --- .../src/rosbridge_server/websocket_handler.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rosbridge_server/src/rosbridge_server/websocket_handler.py b/rosbridge_server/src/rosbridge_server/websocket_handler.py index 5d6ac5307..8f45d2e3e 100755 --- a/rosbridge_server/src/rosbridge_server/websocket_handler.py +++ b/rosbridge_server/src/rosbridge_server/websocket_handler.py @@ -168,7 +168,14 @@ def prewrite_message(self, message, binary): # Use a try block because the log decorator doesn't cooperate with @coroutine. try: with self._write_lock: - yield self.write_message(message, binary) + future = self.write_message(message, binary) + + # When closing, self.write_message() return None even if it's an undocument output. + # Consider it as WebSocketClosedError + if future is None: + raise WebSocketClosedError + + yield future except WebSocketClosedError: rospy.logwarn_throttle(1, 'WebSocketClosedError: Tried to write to a closed websocket') raise