From 7e60d459b4c1b7001e7faa50892857f15a53ab9c Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 4 Sep 2017 15:47:44 +0200 Subject: [PATCH] Prevent a possible memory leak while showing a stuck camera stream --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 96c511bccb..4eaaf4e412 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -326,6 +326,9 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): return True def _stopCamera(self): + self._stream_buffer = b"" + self._stream_buffer_start_index = -1 + if self._camera_timer.isActive(): self._camera_timer.stop() if self._image_reply: @@ -1165,6 +1168,12 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): return self._stream_buffer += self._image_reply.readAll() + if len(self._stream_buffer) > 2000000: # No single camera frame should be 2 Mb or larger + Logger.log("w", "MJPEG buffer exceeds reasonable size. Restarting stream...") + self._stopCamera() # resets stream buffer and start index + self._startCamera() + return + if self._stream_buffer_start_index == -1: self._stream_buffer_start_index = self._stream_buffer.indexOf(b'\xff\xd8') stream_buffer_end_index = self._stream_buffer.lastIndexOf(b'\xff\xd9')