From 04b0760e270c4989209eceb722672b9b5d1384d6 Mon Sep 17 00:00:00 2001
From: Daniel Rozycki <drozycki@users.noreply.github.com>
Date: Sun, 18 Aug 2024 05:24:44 -0700
Subject: [PATCH] Skip NextBus update if integration is still loading (#123564)

* Skip NextBus update if integration is still loading

Fixes a race between the loading thread and
update thread leading to an unrecoverable error

* Use async_at_started

* Use local copy of _route_stops to avoid NextBus race condition

* Update homeassistant/components/nextbus/coordinator.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
---
 homeassistant/components/nextbus/coordinator.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/homeassistant/components/nextbus/coordinator.py b/homeassistant/components/nextbus/coordinator.py
index 6c438f6f808..781742e4c08 100644
--- a/homeassistant/components/nextbus/coordinator.py
+++ b/homeassistant/components/nextbus/coordinator.py
@@ -50,13 +50,15 @@ class NextBusDataUpdateCoordinator(DataUpdateCoordinator):
 
     async def _async_update_data(self) -> dict[str, Any]:
         """Fetch data from NextBus."""
-        self.logger.debug("Updating data from API. Routes: %s", str(self._route_stops))
+
+        _route_stops = set(self._route_stops)
+        self.logger.debug("Updating data from API. Routes: %s", str(_route_stops))
 
         def _update_data() -> dict:
             """Fetch data from NextBus."""
             self.logger.debug("Updating data from API (executor)")
             predictions: dict[RouteStop, dict[str, Any]] = {}
-            for route_stop in self._route_stops:
+            for route_stop in _route_stops:
                 prediction_results: list[dict[str, Any]] = []
                 try:
                     prediction_results = self.client.predictions_for_stop(
-- 
GitLab