summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Keeler <jacob.keeler@livioradio.com>2018-02-13 17:11:40 -0500
committerGitHub <noreply@github.com>2018-02-13 17:11:40 -0500
commitb68ed092a8c1a59571d9ec253dafec01f98c4733 (patch)
tree609c9e45154d72fba4216dda7fa4d5b62aa1ddc5
parent9824d88c49d7e509a41fc32b6ba3ed023ddc0f1d (diff)
parent29c586ce510e858c3cccff5cbf624b63dbda5f0f (diff)
downloadsdl_core-b68ed092a8c1a59571d9ec253dafec01f98c4733.tar.gz
Merge pull request #1950 from fronneburg/fix/Issue_1949
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);
}
}