From f2336a5a3abff6c6ed17baf17c5c931631ec5420 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 24 Apr 2024 03:31:44 +0200 Subject: [PATCH] Fix non-thread-safe operation in harmony (#116070) Fix unsafe thread operation in harmony https://github.com/home-assistant/core/actions/runs/8808429751/job/24177716644?pr=116066 --- homeassistant/components/harmony/entity.py | 13 +++++++++---- homeassistant/components/harmony/remote.py | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/harmony/entity.py b/homeassistant/components/harmony/entity.py index 99b5744e0ed..8bfa9fbad4d 100644 --- a/homeassistant/components/harmony/entity.py +++ b/homeassistant/components/harmony/entity.py @@ -6,6 +6,7 @@ from collections.abc import Callable from datetime import datetime import logging +from homeassistant.core import callback from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import async_call_later @@ -38,7 +39,7 @@ class HarmonyEntity(Entity): _LOGGER.debug("%s: connected to the HUB", self._data.name) self.async_write_ha_state() - self._clear_disconnection_delay() + self._async_clear_disconnection_delay() async def async_got_disconnected(self, _: str | None = None) -> None: """Notification that we're disconnected from the HUB.""" @@ -46,15 +47,19 @@ class HarmonyEntity(Entity): # We're going to wait for 10 seconds before announcing we're # unavailable, this to allow a reconnection to happen. self._unsub_mark_disconnected = async_call_later( - self.hass, TIME_MARK_DISCONNECTED, self._mark_disconnected_if_unavailable + self.hass, + TIME_MARK_DISCONNECTED, + self._async_mark_disconnected_if_unavailable, ) - def _clear_disconnection_delay(self) -> None: + @callback + def _async_clear_disconnection_delay(self) -> None: if self._unsub_mark_disconnected: self._unsub_mark_disconnected() self._unsub_mark_disconnected = None - def _mark_disconnected_if_unavailable(self, _: datetime) -> None: + @callback + def _async_mark_disconnected_if_unavailable(self, _: datetime) -> None: self._unsub_mark_disconnected = None if not self.available: # Still disconnected. Let the state engine know. diff --git a/homeassistant/components/harmony/remote.py b/homeassistant/components/harmony/remote.py index c6b2e9be718..0c9bdcb9c6e 100644 --- a/homeassistant/components/harmony/remote.py +++ b/homeassistant/components/harmony/remote.py @@ -138,7 +138,7 @@ class HarmonyRemote(HarmonyEntity, RemoteEntity, RestoreEntity): _LOGGER.debug("%s: Harmony Hub added", self._data.name) - self.async_on_remove(self._clear_disconnection_delay) + self.async_on_remove(self._async_clear_disconnection_delay) self._setup_callbacks() self.async_on_remove(