Compare commits

...

6 Commits

Author SHA1 Message Date
J. Nick Koston
837d20ab1b Merge branch 'dev' into freeze_timeout_installing_packages 2025-04-16 15:39:23 -10:00
J. Nick Koston
83cea9e608 Merge branch 'dev' into freeze_timeout_installing_packages 2025-02-15 15:43:47 -08:00
J. Nick Koston
663c7804df Merge branch 'dev' into freeze_timeout_installing_packages 2024-12-17 10:42:42 -07:00
J. Nick Koston
6ec9e9250e Merge branch 'dev' into freeze_timeout_installing_packages 2024-08-26 12:35:07 -10:00
J. Nick Koston
3aef8d3633 Merge branch 'dev' into freeze_timeout_installing_packages 2024-06-27 13:50:31 -05:00
J. Nick Koston
064659fce1 Freeze global timeout when installing packages
fixes #119023
2024-06-08 01:54:17 -05:00
2 changed files with 8 additions and 5 deletions

View File

@@ -266,7 +266,9 @@ class RequirementsManager:
async with self.pip_lock:
# Recalculate missing again now that we have the lock
if missing := self._find_missing_requirements(requirements):
await self._async_process_requirements(name, missing)
# Freeze all the timers since installing packages can take a long time
async with self.hass.timeout.async_freeze():
await self._async_process_requirements(name, missing)
def _find_missing_requirements(self, requirements: list[str]) -> list[str]:
"""Find requirements that are missing in the cache."""

View File

@@ -72,11 +72,12 @@ class _GlobalFreezeContext:
continue
zone.pause()
self._manager.global_freezes.append(self)
self._manager.global_freezes.add(self)
def _exit(self) -> None:
"""Finish freeze."""
self._manager.global_freezes.remove(self)
self._manager.global_freezes.discard(self)
if not self._manager.freezes_done:
return
@@ -448,7 +449,7 @@ class TimeoutManager:
self._loop: asyncio.AbstractEventLoop = asyncio.get_running_loop()
self._zones: dict[str, _ZoneTimeoutManager] = {}
self._globals: list[_GlobalTaskContext] = []
self._freezes: list[_GlobalFreezeContext] = []
self._freezes: set[_GlobalFreezeContext] = set()
@property
def zones_done(self) -> bool:
@@ -471,7 +472,7 @@ class TimeoutManager:
return self._globals
@property
def global_freezes(self) -> list[_GlobalFreezeContext]:
def global_freezes(self) -> set[_GlobalFreezeContext]:
"""Return all global Freezes."""
return self._freezes