From a7ecc2af4b0f8dd5817c3f0464765ea0d5afeda1 Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Sat, 12 Jun 2021 10:18:13 -0500 Subject: [PATCH] lock before iterating web sockets --- frigate/output.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/frigate/output.py b/frigate/output.py index daf8ffbd9..d674ff01b 100644 --- a/frigate/output.py +++ b/frigate/output.py @@ -68,9 +68,19 @@ class BroadcastThread(threading.Thread): while True: buf = self.converter.read(65536) if buf: - for ws in self.websocket_server.manager: - if ws.environ["PATH_INFO"].endswith(self.camera): - ws.send(buf, binary=True) + manager = self.websocket_server.manager + with manager.lock: + websockets = manager.websockets.copy() + ws_iter = iter(websockets.values()) + + for ws in ws_iter: + if not ws.terminated and ws.environ["PATH_INFO"].endswith( + self.camera + ): + try: + ws.send(buf, binary=True) + except: + pass elif self.converter.process.poll() is not None: break