From f407776e9a37425dacbde8ee6f83562ef600dd5f Mon Sep 17 00:00:00 2001 From: George Tsiamasiotis Date: Mon, 23 Sep 2024 21:53:23 +0300 Subject: [PATCH] Removed log calls from signal handlers python's logging calls are not re-entrant, which caused at least one of these to deadlock randomly. --- frigate/events/audio.py | 13 +++++-------- frigate/object_detection.py | 1 - frigate/record/record.py | 1 - frigate/review/review.py | 1 - frigate/video.py | 1 - 5 files changed, 5 insertions(+), 12 deletions(-) diff --git a/frigate/events/audio.py b/frigate/events/audio.py index 662eb5189..5875dca84 100644 --- a/frigate/events/audio.py +++ b/frigate/events/audio.py @@ -76,16 +76,8 @@ def listen_to_audio( stop_event = mp.Event() audio_threads: list[threading.Thread] = [] - def exit_process() -> None: - for thread in audio_threads: - thread.join() - - logger.info("Exiting audio detector...") - def receiveSignal(signalNumber: int, frame: Optional[FrameType]) -> None: - logger.debug(f"Audio process received signal {signalNumber}") stop_event.set() - exit_process() signal.signal(signal.SIGTERM, receiveSignal) signal.signal(signal.SIGINT, receiveSignal) @@ -104,6 +96,11 @@ def listen_to_audio( audio_threads.append(audio) audio.start() + for thread in audio_threads: + thread.join() + + logger.info("Exiting audio detector...") + class AudioTfl: def __init__(self, stop_event: mp.Event, num_threads=2): diff --git a/frigate/object_detection.py b/frigate/object_detection.py index de383dffa..d5b8b0cfe 100644 --- a/frigate/object_detection.py +++ b/frigate/object_detection.py @@ -92,7 +92,6 @@ def run_detector( stop_event = mp.Event() def receiveSignal(signalNumber, frame): - logger.info("Signal to exit detection process...") stop_event.set() signal.signal(signal.SIGTERM, receiveSignal) diff --git a/frigate/record/record.py b/frigate/record/record.py index 00634f157..252b80545 100644 --- a/frigate/record/record.py +++ b/frigate/record/record.py @@ -22,7 +22,6 @@ def manage_recordings(config: FrigateConfig) -> None: stop_event = mp.Event() def receiveSignal(signalNumber: int, frame: Optional[FrameType]) -> None: - logger.debug(f"Recording manager process received signal {signalNumber}") stop_event.set() signal.signal(signal.SIGTERM, receiveSignal) diff --git a/frigate/review/review.py b/frigate/review/review.py index d0e3a163f..dafa6c802 100644 --- a/frigate/review/review.py +++ b/frigate/review/review.py @@ -20,7 +20,6 @@ def manage_review_segments(config: FrigateConfig) -> None: stop_event = mp.Event() def receiveSignal(signalNumber: int, frame: Optional[FrameType]) -> None: - logger.debug(f"Manage review segments process received signal {signalNumber}") stop_event.set() signal.signal(signal.SIGTERM, receiveSignal) diff --git a/frigate/video.py b/frigate/video.py index f31b1d267..5c3c8a054 100755 --- a/frigate/video.py +++ b/frigate/video.py @@ -390,7 +390,6 @@ def capture_camera(name, config: CameraConfig, shm_frame_count: int, process_inf stop_event = mp.Event() def receiveSignal(signalNumber, frame): - logger.debug(f"Capture camera received signal {signalNumber}") stop_event.set() signal.signal(signal.SIGTERM, receiveSignal)