From: Ben Darnell Date: Sun, 26 Mar 2017 15:12:37 +0000 (-0400) Subject: websocket: Avoid calling convert_yielded twice on the same object X-Git-Tag: v4.5.0~19^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F1985%2Fhead;p=thirdparty%2Ftornado.git websocket: Avoid calling convert_yielded twice on the same object This is not allowed for native coroutines, although for reasons I can't put my finger on it only fails intermittently (in the one test we have that uses this with native coroutines). --- diff --git a/tornado/websocket.py b/tornado/websocket.py index 18320e60a..73fea8ff0 100644 --- a/tornado/websocket.py +++ b/tornado/websocket.py @@ -457,9 +457,8 @@ class WebSocketProtocol(object): self._abort() else: if result is not None: - self.stream.io_loop.add_future(gen.convert_yielded(result), - lambda f: f.result()) - + result = gen.convert_yielded(result) + self.stream.io_loop.add_future(result, lambda f: f.result()) return result def on_connection_close(self): @@ -860,7 +859,7 @@ class WebSocketProtocol13(WebSocketProtocol): if not self.client_terminated: if handled_future: # on_message is a coroutine, process more frames once it's done. - gen.convert_yielded(handled_future).add_done_callback( + handled_future.add_done_callback( lambda future: self._receive_frame()) else: self._receive_frame()