From 29c586ce510e858c3cccff5cbf624b63dbda5f0f Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 13 Dec 2017 11:07:18 -0800 Subject: prevent deadlocks in EventDispatcherImpl::raise_event --- .../src/event_engine/event_dispatcher_impl.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc b/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc index d0bc0c41ef..b19a6f9194 100644 --- a/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc +++ b/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc @@ -45,8 +45,10 @@ EventDispatcherImpl::EventDispatcherImpl() EventDispatcherImpl::~EventDispatcherImpl() {} void EventDispatcherImpl::raise_event(const Event& event) { + AutoLock observer_lock(observer_lock_); { - AutoLock auto_lock(state_lock_); + AutoLock state_lock(state_lock_); + // check if event is notification if (hmi_apis::messageType::notification == event.smart_object_type()) { const uint32_t notification_correlation_id = 0; @@ -61,12 +63,10 @@ void EventDispatcherImpl::raise_event(const Event& event) { } // Call observers - EventObserver* temp; while (!observers_.empty()) { - observer_lock_.Acquire(); - temp = *observers_.begin(); + EventObserver* temp = *observers_.begin(); observers_.erase(observers_.begin()); - observer_lock_.Release(); + AutoUnlock unlock_observer(observer_lock); temp->on_event(event); } } -- cgit v1.2.1