Prevent librespot daemon getting into an endless loop
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 23 Sep 2025 21:40:09 +0000 (23:40 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 23 Sep 2025 21:40:09 +0000 (23:40 +0200)
music_assistant/providers/spotify_connect/__init__.py

index 900966f5eda1a5acab96bbe8bd2472a5e984b02a..bdb23b2e9e6e4f9cae4cdbce7a2753f53dfa8f2a 100644 (file)
@@ -159,6 +159,7 @@ class SpotifyConnectProvider(PluginProvider):
                 self._handle_custom_webservice,
             ),
         ]
+        self._runner_error_count = 0
 
     async def handle_async_init(self) -> None:
         """Handle async initialization of the provider."""
@@ -245,8 +246,11 @@ class SpotifyConnectProvider(PluginProvider):
             if not self._librespot_started.is_set():
                 self.unload_with_error("Unable to initialize librespot daemon.")
             # auto restart if not stopped manually
-            if not self._stop_called and self._librespot_started.is_set():
-                self._setup_player_daemon()
+            elif not self._stop_called and self._runner_error_count >= 5:
+                self.unload_with_error("Librespot daemon failed to start multiple times.")
+            elif not self._stop_called:
+                self._runner_error_count += 1
+                self.mass.call_later(2, self._setup_player_daemon)
 
     def _setup_player_daemon(self) -> None:
         """Handle setup of the spotify connect daemon for a player."""