summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank <fronneburg@xevo.com>2017-12-13 11:07:18 -0800
committerFrank <fronneburg@xevo.com>2017-12-13 11:07:18 -0800
commit29c586ce510e858c3cccff5cbf624b63dbda5f0f (patch)
tree6222af8e57f124107e586e1bcd31561ab8b16cab
parent0b19cf498d1c9972d67b85793dc6b029c26378a0 (diff)
downloadsdl_core-29c586ce510e858c3cccff5cbf624b63dbda5f0f.tar.gz
prevent deadlocks in EventDispatcherImpl::raise_event
-rw-r--r--src/components/application_manager/src/event_engine/event_dispatcher_impl.cc10
1 files 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);
}
}