Fix race condition on shutdown in Sonos
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 16 Dec 2025 22:50:02 +0000 (23:50 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 16 Dec 2025 22:50:02 +0000 (23:50 +0100)
music_assistant/providers/sonos/player.py

index b0611266b9397071af91b467fb20fb5fe00b7b56..1bb8345def09154ffda356346f66a76e3bf9359c 100644 (file)
@@ -719,6 +719,8 @@ class SonosPlayer(Player):
 
     async def _connect(self, retry_on_fail: int = 0) -> None:
         """Connect to the Sonos player."""
+        if self.mass.closing:
+            return
         if self._listen_task and not self._listen_task.done():
             self.logger.debug("Already connected to Sonos player: %s", self.player_id)
             return
@@ -744,7 +746,7 @@ class SonosPlayer(Player):
                     self.logger.exception("Error in Sonos player listener: %s", err)
             finally:
                 self.logger.info("Disconnected from player API")
-                if self.connected:
+                if self.connected and not self.mass.closing:
                     # we didn't explicitly disconnect, try to reconnect
                     # this should simply try to reconnect once and if that fails
                     # we rely on mdns to pick it up again later
@@ -758,6 +760,8 @@ class SonosPlayer(Player):
 
     def reconnect(self, delay: float = 1) -> None:
         """Reconnect the player."""
+        if self.mass.closing:
+            return
         # use a task_id to prevent multiple reconnects
         task_id = f"sonos_reconnect_{self.player_id}"
         self.mass.call_later(delay, self._connect, delay, task_id=task_id)