mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Block detectable I/O in the event loop (#48387)
We added a warning when this happens last April and gave developers a year to fix the instability. We now prevent the instability by raising RuntimeError when code attempts to do known I/O in the event loop instead of the executor. We now provide a suggestion on how to fix the code that is causing the issue.
This commit is contained in:
parent
63e3012380
commit
b50dcef94f
@ -136,6 +136,10 @@ def check_loop() -> None:
|
||||
found_frame.lineno,
|
||||
found_frame.line.strip(),
|
||||
)
|
||||
raise RuntimeError(
|
||||
f"I/O must be done in the executor; Use `await hass.async_add_executor_job()` "
|
||||
f"at {found_frame.filename[index:]}, line {found_frame.lineno}: {found_frame.line.strip()}"
|
||||
)
|
||||
|
||||
|
||||
def protect_loop(func: Callable) -> Callable:
|
||||
|
@ -78,7 +78,7 @@ async def test_check_loop_async():
|
||||
|
||||
async def test_check_loop_async_integration(caplog):
|
||||
"""Test check_loop detects when called from event loop from integration context."""
|
||||
with patch(
|
||||
with pytest.raises(RuntimeError), patch(
|
||||
"homeassistant.util.async_.extract_stack",
|
||||
return_value=[
|
||||
Mock(
|
||||
@ -107,7 +107,7 @@ async def test_check_loop_async_integration(caplog):
|
||||
|
||||
async def test_check_loop_async_custom(caplog):
|
||||
"""Test check_loop detects when called from event loop with custom component context."""
|
||||
with patch(
|
||||
with pytest.raises(RuntimeError), patch(
|
||||
"homeassistant.util.async_.extract_stack",
|
||||
return_value=[
|
||||
Mock(
|
||||
|
Loading…
x
Reference in New Issue
Block a user