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
This commit is contained in:
J. Nick Koston 2024-04-24 03:31:44 +02:00 committed by GitHub
parent e3016b131a
commit f2336a5a3a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 5 deletions

View File

@ -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.

View File

@ -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(