From e0cf635d3408cf3c3009878d64171a619da6081a Mon Sep 17 00:00:00 2001 From: Eric Callahan Date: Sat, 30 Jul 2022 14:50:01 -0400 Subject: [PATCH] simplyprint: websocket write fix Gracefully handle websocket closed conditions. Signed-off-by: Eric Callahan --- moonraker/components/simplyprint.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/moonraker/components/simplyprint.py b/moonraker/components/simplyprint.py index 0162a5d..a674b54 100644 --- a/moonraker/components/simplyprint.py +++ b/moonraker/components/simplyprint.py @@ -1021,6 +1021,7 @@ class SimplyPrint(Subscribable): if ( not self.connected or self.ws is None or + self.ws.protocol is None or not self._check_setup_event(evt_name) ): fut = self.eventloop.create_future() @@ -1032,7 +1033,14 @@ class SimplyPrint(Subscribable): else: self._logger.info("sent: webcam stream") self._reset_keepalive() - return self.ws.write_message(json.dumps(packet)) + try: + fut = self.ws.write_message(json.dumps(packet)) + except tornado.websocket.WebSocketClosedError: + fut = self.eventloop.create_future() + fut.set_result(False) + else: + self._reset_keepalive() + return fut def _reset_keepalive(self): if self.keepalive_hdl is not None: @@ -1059,10 +1067,13 @@ class SimplyPrint(Subscribable): async def close(self): self.print_handler.cancel() self.webcam_stream.stop() - await self.send_sp("shutdown", None) - self._logger.close() self.amb_detect.stop() self.printer_info_timer.stop() + try: + await self.send_sp("shutdown", None) + except tornado.websocket.WebSocketClosedError: + pass + self._logger.close() self.is_closing = True if self.ws is not None: self.ws.close(1001, "Client Shutdown")