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(
|
manager.shm_store.update(
|
||||||
_segments(cam_frame0=1, cam_frame1=1, cam_frame_times=8, other_frame0=1)
|
_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")
|
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:
|
def test_get_without_frame_time_skips_ledger(self) -> None:
|
||||||
manager = SharedMemoryFrameManager()
|
manager = SharedMemoryFrameManager()
|
||||||
|
|||||||
@@ -1171,8 +1171,11 @@ class SharedMemoryFrameManager(FrameManager):
|
|||||||
|
|
||||||
def close_camera(self, camera: str) -> None:
|
def close_camera(self, camera: str) -> None:
|
||||||
"""Drop every cached mapping for a camera's frame ring and ledger."""
|
"""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")]:
|
for name in list(self.shm_store):
|
||||||
self.close(name)
|
owner, _, suffix = name.rpartition("_frame")
|
||||||
|
|
||||||
|
if owner == camera and (suffix.isdigit() or suffix == "_times"):
|
||||||
|
self.close(name)
|
||||||
|
|
||||||
def delete(self, name: str):
|
def delete(self, name: str):
|
||||||
if name in self.shm_store:
|
if name in self.shm_store:
|
||||||
|
|||||||
Reference in New Issue
Block a user