mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-10-13 10:12:47 +03:00
match a camera's frame names exactly in close_camera
The prefix match on `{camera}_frame` also caught another camera whose name starts with it, so removing `cam` dropped the cached ring of a camera named `cam_frame`.
This commit is contained in:
@@ -289,10 +289,17 @@ class TestSharedMemoryFrameManagerFrameTimes(unittest.TestCase):
|
||||
manager.shm_store.update(
|
||||
_segments(cam_frame0=1, cam_frame1=1, cam_frame_times=8, other_frame0=1)
|
||||
)
|
||||
# a camera named cam_frame shares the cam_frame prefix
|
||||
manager.shm_store.update(
|
||||
{"cam_frame_frame0": _fake_shm(1), "cam_frame_frame_times": _fake_shm(8)}
|
||||
)
|
||||
|
||||
manager.close_camera("cam")
|
||||
|
||||
self.assertEqual(set(manager.shm_store), {"other_frame0"})
|
||||
self.assertEqual(
|
||||
set(manager.shm_store),
|
||||
{"other_frame0", "cam_frame_frame0", "cam_frame_frame_times"},
|
||||
)
|
||||
|
||||
def test_get_without_frame_time_skips_ledger(self) -> None:
|
||||
manager = SharedMemoryFrameManager()
|
||||
|
||||
@@ -1171,8 +1171,11 @@ class SharedMemoryFrameManager(FrameManager):
|
||||
|
||||
def close_camera(self, camera: str) -> None:
|
||||
"""Drop every cached mapping for a camera's frame ring and ledger."""
|
||||
for name in [n for n in self.shm_store if n.startswith(f"{camera}_frame")]:
|
||||
self.close(name)
|
||||
for name in list(self.shm_store):
|
||||
owner, _, suffix = name.rpartition("_frame")
|
||||
|
||||
if owner == camera and (suffix.isdigit() or suffix == "_times"):
|
||||
self.close(name)
|
||||
|
||||
def delete(self, name: str):
|
||||
if name in self.shm_store:
|
||||
|
||||
Reference in New Issue
Block a user