From f24ba6bfc18a419f47cb5d8c4550ee6e2c2cced9 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 8 Jul 2024 17:15:07 -0600 Subject: [PATCH] Ensure files are closed --- frigate/output/output.py | 1 + frigate/util/image.py | 12 +++++------- frigate/video.py | 5 +++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frigate/output/output.py b/frigate/output/output.py index d932d88d3..5904f0b10 100644 --- a/frigate/output/output.py +++ b/frigate/output/output.py @@ -127,6 +127,7 @@ def output_frames( preview_recorders[camera].write_data( current_tracked_objects, motion_boxes, frame_time, frame ) + frame_manager.close(frame_id) move_preview_frames("clips") diff --git a/frigate/util/image.py b/frigate/util/image.py index 4f5f40515..cb8fd18ce 100644 --- a/frigate/util/image.py +++ b/frigate/util/image.py @@ -687,14 +687,14 @@ class DictFrameManager(FrameManager): class SharedMemoryFrameManager(FrameManager): def __init__(self): - self.shm_store = {} + self.shm_store: dict[str, shared_memory.SharedMemory] = {} - def create(self, name, size) -> AnyStr: + def create(self, name: str, size) -> AnyStr: shm = shared_memory.SharedMemory(name=name, create=True, size=size) self.shm_store[name] = shm return shm.buf - def get(self, name, shape): + def get(self, name: str, shape): if name in self.shm_store: shm = self.shm_store[name] else: @@ -702,18 +702,16 @@ class SharedMemoryFrameManager(FrameManager): self.shm_store[name] = shm return np.ndarray(shape, dtype=np.uint8, buffer=shm.buf) - def close(self, name): + def close(self, name: str): if name in self.shm_store: self.shm_store[name].close() del self.shm_store[name] - def delete(self, name): + def delete(self, name: str): if name in self.shm_store: self.shm_store[name].close() self.shm_store[name].unlink() del self.shm_store[name] - else: - logger.error(f"Could not delete {name} the store is {self.shm_store}") def create_mask(frame_shape, mask): diff --git a/frigate/video.py b/frigate/video.py index 3ab060826..dd44109b3 100755 --- a/frigate/video.py +++ b/frigate/video.py @@ -109,7 +109,7 @@ def capture_frames( skipped_eps = EventsPerSecond() skipped_eps.start() - shm_count = max(10, config.detect.fps * 2) + shm_count = 5 shm_frames: list[str] = [] while True: @@ -128,6 +128,8 @@ def capture_frames( expired_frame_name = shm_frames.pop(0) frame_manager.delete(expired_frame_name) except Exception: + frame_manager.delete(frame_name) + # shutdown has been initiated if stop_event.is_set(): break @@ -150,7 +152,6 @@ def capture_frames( except queue.Full: # if the queue is full, skip this frame skipped_eps.update() - frame_manager.delete(frame_name) class CameraWatchdog(threading.Thread):