Forráskód Böngészése

lock before iterating web sockets

Blake Blackshear 3 éve
szülő
commit
a7ecc2af4b
1 módosított fájl, 13 hozzáadás és 3 törlés
  1. 13 3
      frigate/output.py

+ 13 - 3
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