From 943a8a0d5c9ae1f553fe5c5dd7a050a7bde7eec2 Mon Sep 17 00:00:00 2001 From: imonlinux <39863321+imonlinux@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:40:42 -0800 Subject: [PATCH] Update __main__.py Fix MpvMediaPlayer Race Condition Goal: The mpv library runs in its own thread. When a track finishes, its callback (_on_idle_active) runs in that thread and tries to modify the satellite's state, creating a race condition. We will fix this by "marshaling" that callback onto the main asyncio loop. added loop=loop to the MpvMediaPlayer constructors --- linux_voice_assistant/__main__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/linux_voice_assistant/__main__.py b/linux_voice_assistant/__main__.py index a672034..cbedc33 100644 --- a/linux_voice_assistant/__main__.py +++ b/linux_voice_assistant/__main__.py @@ -213,8 +213,16 @@ async def main() -> None: break assert stop_model is not None - music_player = MpvMediaPlayer(device=args.audio_output_device, initial_volume=preferences.volume_level) - tts_player = MpvMediaPlayer(device=args.audio_output_device, initial_volume=preferences.volume_level) + music_player = MpvMediaPlayer( + loop=loop, # <-- MODIFIED + device=args.audio_output_device, + initial_volume=preferences.volume_level + ) + tts_player = MpvMediaPlayer( + loop=loop, # <-- MODIFIED + device=args.audio_output_device, + initial_volume=preferences.volume_level + ) state = ServerState( name=args.name,