summaryrefslogtreecommitdiff
path: root/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/application_manager/src/event_engine/event_dispatcher_impl.cc')
-rw-r--r--src/components/application_manager/src/event_engine/event_dispatcher_impl.cc21
1 files changed, 19 insertions, 2 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 7392731d70..0d7dc9cfe0 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
@@ -66,7 +66,11 @@ void EventDispatcherImpl::raise_event(const Event& event) {
EventObserver* temp = *observers.begin();
observers.erase(observers.begin());
AutoUnlock unlock_observer(observer_lock);
- temp->on_event(event);
+
+ if (temp->IncrementReferenceCount()) {
+ temp->HandleOnEvent(event);
+ temp->DecrementReferenceCount();
+ }
}
}
@@ -89,6 +93,15 @@ struct IdCheckFunctor {
};
void EventDispatcherImpl::remove_observer(const Event::EventID& event_id,
+ const int32_t hmi_correlation_id) {
+ AutoLock auto_lock(state_lock_);
+ auto& observers = observers_event_[event_id][hmi_correlation_id];
+ for (auto observer : observers) {
+ remove_observer_from_vector(*observer);
+ }
+}
+
+void EventDispatcherImpl::remove_observer(const Event::EventID& event_id,
EventObserver& observer) {
remove_observer_from_vector(observer);
AutoLock auto_lock(state_lock_);
@@ -148,7 +161,11 @@ void EventDispatcherImpl::raise_mobile_event(const MobileEvent& event) {
EventObserver* temp = *mobile_observers_.begin();
mobile_observers_.erase(mobile_observers_.begin());
AutoUnlock unlock_observer(observer_lock);
- temp->on_event(event);
+
+ if (temp->IncrementReferenceCount()) {
+ temp->HandleOnEvent(event);
+ temp->DecrementReferenceCount();
+ }
}
}