mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Always do thread safety checks when calling async_fire (#116055)
This commit is contained in:
parent
53a179088f
commit
4a59ee978c
@ -1407,6 +1407,12 @@ class _OneTimeListener(Generic[_DataT]):
|
|||||||
EMPTY_LIST: list[Any] = []
|
EMPTY_LIST: list[Any] = []
|
||||||
|
|
||||||
|
|
||||||
|
def _verify_event_type_length_or_raise(event_type: EventType[_DataT] | str) -> None:
|
||||||
|
"""Verify the length of the event type and raise if too long."""
|
||||||
|
if len(event_type) > MAX_LENGTH_EVENT_EVENT_TYPE:
|
||||||
|
raise MaxLengthExceeded(event_type, "event_type", MAX_LENGTH_EVENT_EVENT_TYPE)
|
||||||
|
|
||||||
|
|
||||||
class EventBus:
|
class EventBus:
|
||||||
"""Allow the firing of and listening for events."""
|
"""Allow the firing of and listening for events."""
|
||||||
|
|
||||||
@ -1447,8 +1453,9 @@ class EventBus:
|
|||||||
context: Context | None = None,
|
context: Context | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Fire an event."""
|
"""Fire an event."""
|
||||||
|
_verify_event_type_length_or_raise(event_type)
|
||||||
self._hass.loop.call_soon_threadsafe(
|
self._hass.loop.call_soon_threadsafe(
|
||||||
self.async_fire, event_type, event_data, origin, context
|
self.async_fire_internal, event_type, event_data, origin, context
|
||||||
)
|
)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
@ -1464,13 +1471,8 @@ class EventBus:
|
|||||||
|
|
||||||
This method must be run in the event loop.
|
This method must be run in the event loop.
|
||||||
"""
|
"""
|
||||||
if self._hass.config.debug:
|
_verify_event_type_length_or_raise(event_type)
|
||||||
self._hass.verify_event_loop_thread("async_fire")
|
self._hass.verify_event_loop_thread("async_fire")
|
||||||
|
|
||||||
if len(event_type) > MAX_LENGTH_EVENT_EVENT_TYPE:
|
|
||||||
raise MaxLengthExceeded(
|
|
||||||
event_type, "event_type", MAX_LENGTH_EVENT_EVENT_TYPE
|
|
||||||
)
|
|
||||||
return self.async_fire_internal(
|
return self.async_fire_internal(
|
||||||
event_type, event_data, origin, context, time_fired
|
event_type, event_data, origin, context, time_fired
|
||||||
)
|
)
|
||||||
|
@ -3449,8 +3449,6 @@ async def test_debug_mode_defaults_to_off(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
async def test_async_fire_thread_safety(hass: HomeAssistant) -> None:
|
async def test_async_fire_thread_safety(hass: HomeAssistant) -> None:
|
||||||
"""Test async_fire thread safety."""
|
"""Test async_fire thread safety."""
|
||||||
hass.config.debug = True
|
|
||||||
|
|
||||||
events = async_capture_events(hass, "test_event")
|
events = async_capture_events(hass, "test_event")
|
||||||
hass.bus.async_fire("test_event")
|
hass.bus.async_fire("test_event")
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user