diff options
author | AGaliuzov <AGaliuzov@luxoft.com> | 2015-12-07 14:56:43 +0200 |
---|---|---|
committer | AGaliuzov <AGaliuzov@luxoft.com> | 2015-12-07 14:56:43 +0200 |
commit | 39ddde961933ee64402040ec217497f4a63926ec (patch) | |
tree | 735d99d6b441b5326aa2ad2004ace63217bdc065 | |
parent | 6612a244b195d854853f025c8fd5f17d3d48965e (diff) | |
parent | 95ccb8514f476dab49f24a7bca5281d826990215 (diff) | |
download | smartdevicelink-39ddde961933ee64402040ec217497f4a63926ec.tar.gz |
Merge pull request #284 from LuxoftSDL/hotfix/Core_dump_if_make_MASTER_RESET
Hotfix/core dump if make master reset
-rw-r--r-- | src/components/application_manager/include/application_manager/application_manager_impl.h | 4 | ||||
-rw-r--r-- | src/components/application_manager/src/application_manager_impl.cc | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h index 2961202bd..f75c40389 100644 --- a/src/components/application_manager/include/application_manager/application_manager_impl.h +++ b/src/components/application_manager/include/application_manager/application_manager_impl.h @@ -1381,6 +1381,7 @@ class ApplicationManagerImpl : public ApplicationManager, std::vector<ApplicationManagerTimerPtr> timer_pool_; sync_primitives::Lock timer_pool_lock_; + sync_primitives::Lock stopping_flag_lock_; StateController state_ctrl_; @@ -1401,8 +1402,7 @@ class ApplicationManagerImpl : public ApplicationManager, timer::TimerThread<ApplicationManagerImpl> tts_global_properties_timer_; bool is_low_voltage_; - - bool is_stopping_; + volatile bool is_stopping_; DISALLOW_COPY_AND_ASSIGN(ApplicationManagerImpl); 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); } |