From baa8de2f8998377074d42d164769cfc334d33543 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 20 Apr 2021 06:11:58 -1000 Subject: [PATCH] Fix homekit memory leak on entry reload (#49452) --- homeassistant/components/homekit/__init__.py | 14 +++++--------- homeassistant/components/homekit/const.py | 1 - 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/homekit/__init__.py b/homeassistant/components/homekit/__init__.py index 0e4bcc28aab..04545d8a247 100644 --- a/homeassistant/components/homekit/__init__.py +++ b/homeassistant/components/homekit/__init__.py @@ -95,7 +95,6 @@ from .const import ( SERVICE_HOMEKIT_RESET_ACCESSORY, SERVICE_HOMEKIT_START, SHUTDOWN_TIMEOUT, - UNDO_UPDATE_LISTENER, ) from .util import ( accessory_friendly_name, @@ -276,12 +275,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): entry.title, ) - hass.data[DOMAIN][entry.entry_id] = { - HOMEKIT: homekit, - UNDO_UPDATE_LISTENER: entry.add_update_listener(_async_update_listener), - } + entry.async_on_unload(entry.add_update_listener(_async_update_listener)) + entry.async_on_unload( + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, homekit.async_stop) + ) - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, homekit.async_stop) + hass.data[DOMAIN][entry.entry_id] = {HOMEKIT: homekit} if hass.state == CoreState.running: await homekit.async_start() @@ -301,9 +300,6 @@ async def _async_update_listener(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): """Unload a config entry.""" dismiss_setup_message(hass, entry.entry_id) - - hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]() - homekit = hass.data[DOMAIN][entry.entry_id][HOMEKIT] if homekit.status == STATUS_RUNNING: diff --git a/homeassistant/components/homekit/const.py b/homeassistant/components/homekit/const.py index abfc6a2aa38..073650aba40 100644 --- a/homeassistant/components/homekit/const.py +++ b/homeassistant/components/homekit/const.py @@ -8,7 +8,6 @@ HOMEKIT_FILE = ".homekit.state" HOMEKIT_PAIRING_QR = "homekit-pairing-qr" HOMEKIT_PAIRING_QR_SECRET = "homekit-pairing-qr-secret" HOMEKIT = "homekit" -UNDO_UPDATE_LISTENER = "undo_update_listener" SHUTDOWN_TIMEOUT = 30 CONF_ENTRY_INDEX = "index"