From 5a451d63fc492177ce86959ef33cd70394517c19 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Sun, 26 Mar 2017 11:12:37 -0400 Subject: [PATCH] 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). --- tornado/websocket.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tornado/websocket.py b/tornado/websocket.py index 18320e60..73fea8ff 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()