prevent hang on stop of cliraop
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 8 Apr 2024 13:39:56 +0000 (15:39 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 8 Apr 2024 13:39:56 +0000 (15:39 +0200)
music_assistant/server/providers/airplay/__init__.py

index a5ea4e8ee1b2a0423935f296f1af29501b00b4a8..4adab756aa131fcf625e2a1cc4dfa9cfdb24c8e1 100644 (file)
@@ -280,7 +280,14 @@ class AirplayStream:
             self.audio_source_task.cancel()
         if not self._cliraop_proc.closed:
             await self.send_cli_command("ACTION=STOP")
-        await self._cliraop_proc.wait()
+        try:
+            await asyncio.wait_for(self._cliraop_proc.wait(), 5)
+        except TimeoutError:
+            self.prov.logger.warning(
+                "Raop process for %s did not stop in time, is the player offline?",
+                self.airplay_player.player_id,
+            )
+            await self._cliraop_proc.close(True)
 
         # ffmpeg can sometimes hang due to the connected pipes
         # we handle closing it but it can be a bit slow so do that in the background