From d514baac380961b4bd8f57458b5a22f06d5bba31 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 16 May 2019 15:00:00 +0100 Subject: [PATCH] Better fault handling: a delayed send/close will only fire if self.ws is still present --- syndicate/mini/core.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/syndicate/mini/core.py b/syndicate/mini/core.py index 6496bc9..12a770f 100644 --- a/syndicate/mini/core.py +++ b/syndicate/mini/core.py @@ -224,12 +224,18 @@ class WebsocketConnection(Connection): self.ws = None def _send(self, bs): - if self.ws: - self.loop.call_soon_threadsafe(lambda: self.loop.create_task(self.ws.send(bs))) + if self.loop: + def _do_send(): + if self.ws: + self.loop.create_task(self.ws.send(bs)) + self.loop.call_soon_threadsafe(_do_send) def _disconnect(self): - if self.ws: - self.loop.call_soon_threadsafe(lambda: self.loop.create_task(self.ws.close())) + if self.loop: + def _do_disconnect(): + if self.ws: + self.loop.create_task(self.ws.close()) + self.loop.call_soon_threadsafe(_do_disconnect) async def main(self, loop, on_connected=None): if self.ws is not None: