Update audio_engine.py
Summary Add thread-safe locking for wake word reload logic Problem Wake word reload logic accessed self.state.wake_words_changed flag without synchronization, creating a potential race condition when wake words are dynamically switched via Home Assistant. Changes Added self._wake_words_lock = threading.Lock() in __init__ Wrapped wake word reload block with with self._wake_words_lock: context manager Ensures atomic read-modify-write of wake_words_changed flag Impact Risk: Very low - purely defensive improvement Benefit: Eliminates race condition in wake word switching Performance: Negligible overhead (lock only held during reload check)
This commit is contained in:
@@ -28,6 +28,9 @@ class AudioEngine:
|
||||
self.block_size = block_size
|
||||
self._thread: Optional[threading.Thread] = None
|
||||
|
||||
# CRITICAL FIX: Add lock for thread-safe wake word reload
|
||||
self._wake_words_lock = threading.Lock()
|
||||
|
||||
def start(self):
|
||||
"""Starts the audio processing thread."""
|
||||
self._thread = threading.Thread(
|
||||
@@ -113,6 +116,8 @@ class AudioEngine:
|
||||
time.sleep(0.01)
|
||||
continue
|
||||
|
||||
# CRITICAL FIX: Protect wake word reload with lock
|
||||
with self._wake_words_lock:
|
||||
# Update active wake words if changed
|
||||
if (not wake_words) or (self.state.wake_words_changed):
|
||||
self.state.wake_words_changed = False
|
||||
|
||||
Reference in New Issue
Block a user