diff options
Diffstat (limited to 'src/components/application_manager/src/application_manager_impl.cc')
-rw-r--r-- | src/components/application_manager/src/application_manager_impl.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index baa45bc0b..296f1c0e3 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -102,6 +102,7 @@ ApplicationManagerImpl::ApplicationManagerImpl() resume_ctrl_(this), navi_close_app_timeout_(profile::Profile::instance()->stop_streaming_timeout()), navi_end_stream_timeout_(profile::Profile::instance()->stop_streaming_timeout()), + stopping_flag_lock_(true), #ifdef TIME_TESTER metric_observer_(NULL), #endif // TIME_TESTER @@ -160,7 +161,9 @@ ApplicationManagerImpl::~ApplicationManagerImpl() { bool ApplicationManagerImpl::Stop() { LOG4CXX_INFO(logger_, "Stop ApplicationManager."); + stopping_flag_lock_.Acquire(); is_stopping_ = true; + stopping_flag_lock_.Release(); application_list_update_timer_->stop(); try { UnregisterAllApplications(); @@ -2126,6 +2129,9 @@ void ApplicationManagerImpl::SetUnregisterAllApplicationsReason( void ApplicationManagerImpl::HeadUnitReset( mobile_api::AppInterfaceUnregisteredReason::eType reason) { + stopping_flag_lock_.Acquire(); + is_stopping_ = true; + stopping_flag_lock_.Release(); switch (reason) { case mobile_api::AppInterfaceUnregisteredReason::MASTER_RESET: { UnregisterAllApplications(); @@ -2359,6 +2365,12 @@ void ApplicationManagerImpl::Handle(const impl::MessageFromMobile message) { LOG4CXX_ERROR(logger_, "Null-pointer message received."); return; } + + sync_primitives::AutoLock lock(stopping_flag_lock_); + if (is_stopping_) { + LOG4CXX_INFO(logger_, "Application manager is stopping"); + return; + } ProcessMessageFromMobile(message); } |