Quellcode durchsuchen

Fix disconnect race on subsequent operations (#151)

J. Nick Koston vor 2 Jahren
Ursprung
Commit
9c8365073a
1 geänderte Dateien mit 10 neuen und 2 gelöschten Zeilen
  1. 10 2
      switchbot/devices/device.py

+ 10 - 2
switchbot/devices/device.py

@@ -256,7 +256,7 @@ class SwitchbotBaseDevice:
         self._cancel_disconnect_timer()
         self._expected_disconnect = False
         self._disconnect_timer = self.loop.call_later(
-            DISCONNECT_DELAY, self._disconnect
+            DISCONNECT_DELAY, self._disconnect_from_timer
         )
 
     def _disconnected(self, client: BleakClientWithServiceCache) -> None:
@@ -272,8 +272,16 @@ class SwitchbotBaseDevice:
             self.rssi,
         )
 
-    def _disconnect(self):
+    def _disconnect_from_timer(self):
         """Disconnect from device."""
+        if self._operation_lock.locked() and self._client.is_connected:
+            _LOGGER.debug(
+                "%s: Operation in progress, resetting disconnect timer; RSSI: %s",
+                self.name,
+                self.rssi,
+            )
+            self._reset_disconnect_timer()
+            return
         self._cancel_disconnect_timer()
         asyncio.create_task(self._execute_timed_disconnect())