From a4868184d4bc32f08e7644344e5c5672a78263b9 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Fri, 22 May 2026 08:40:15 -0500 Subject: [PATCH] use setdefault when adding a new camera MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Multiple subscribers in the same process each unpickle the ZMQ payload independently and would otherwise write divergent Python objects to the shared cameras dict — leaving long-lived references (e.g. CameraState.camera_config) pointing at a copy that subsequent in-place mutations like apply_section_update can never reach. setdefault collapses everyone onto the first writer's object so attribute mutations propagate to every consumer in this process. --- frigate/config/camera/updater.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frigate/config/camera/updater.py b/frigate/config/camera/updater.py index 95092da08b..852fadbe22 100644 --- a/frigate/config/camera/updater.py +++ b/frigate/config/camera/updater.py @@ -84,8 +84,8 @@ class CameraConfigUpdateSubscriber: self, camera: str, update_type: CameraConfigUpdateEnum, updated_config: Any ) -> None: if update_type == CameraConfigUpdateEnum.add: - self.config.cameras[camera] = updated_config - self.camera_configs[camera] = updated_config + shared = self.config.cameras.setdefault(camera, updated_config) + self.camera_configs[camera] = shared return elif update_type == CameraConfigUpdateEnum.remove: self.config.cameras.pop(camera, None)