mirror of
https://github.com/home-assistant/core.git
synced 2025-06-13 01:27:08 +00:00
Catching exceptions from listeners in the eventbus to prevent unexpected crashed to crash the core
This commit is contained in:
parent
86bd8d68f1
commit
1a22f1678c
@ -108,16 +108,18 @@ class EventBus(object):
|
|||||||
assert isinstance(event, Event), "event needs to be an instance of Event"
|
assert isinstance(event, Event), "event needs to be an instance of Event"
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
""" We dont want the eventbus to be blocking,
|
""" We dont want the eventbus to be blocking - run in a thread. """
|
||||||
We dont want the eventbus to crash when one of its listeners throws an Exception
|
|
||||||
So run in a thread. """
|
|
||||||
self.lock.acquire()
|
self.lock.acquire()
|
||||||
|
|
||||||
self.logger.info("EventBus:Event {}: {}".format(event.event_type, event.data))
|
self.logger.info("EventBus:Event {}: {}".format(event.event_type, event.data))
|
||||||
|
|
||||||
for callback in chain(self.listeners[ALL_EVENTS], self.listeners[event.event_type]):
|
for callback in chain(self.listeners[ALL_EVENTS], self.listeners[event.event_type]):
|
||||||
|
try:
|
||||||
callback(event)
|
callback(event)
|
||||||
|
|
||||||
|
except:
|
||||||
|
self.logger.exception("EventBus:Exception in listener")
|
||||||
|
|
||||||
if event.remove_listener:
|
if event.remove_listener:
|
||||||
if callback in self.listeners[ALL_EVENTS]:
|
if callback in self.listeners[ALL_EVENTS]:
|
||||||
self.listeners[ALL_EVENTS].remove(callback)
|
self.listeners[ALL_EVENTS].remove(callback)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user