diff options
author | Maksym Ked (GitHub) <41471947+mked-luxoft@users.noreply.github.com> | 2019-09-26 17:54:57 +0300 |
---|---|---|
committer | JackLivio <jack@livio.io> | 2019-09-26 10:54:57 -0400 |
commit | 35e6a7ec5bbcb27bd972a2db07a18c2294b1bc0c (patch) | |
tree | 584f9f9b3a63eb34697bae183998cac39ded3b43 | |
parent | be88a0b1eac802335d3142d3fe008dc05900deba (diff) | |
download | sdl_core-35e6a7ec5bbcb27bd972a2db07a18c2294b1bc0c.tar.gz |
Fix/crash on ign off (#3048)
* Shutdown message queues in rpc service on sdl close
* fixup! Shutdown message queues in rpc service on sdl close
7 files changed, 31 insertions, 0 deletions
diff --git a/src/components/application_manager/include/application_manager/rpc_service_impl.h b/src/components/application_manager/include/application_manager/rpc_service_impl.h index ce3d1f1e22..3e3d83a519 100644 --- a/src/components/application_manager/include/application_manager/rpc_service_impl.h +++ b/src/components/application_manager/include/application_manager/rpc_service_impl.h @@ -118,6 +118,8 @@ class RPCServiceImpl : public RPCService, mobile_apis::MOBILE_API& mobile_so_factory_); ~RPCServiceImpl(); + void Stop() OVERRIDE; + bool ManageMobileCommand(const commands::MessageSharedPtr message, commands::Command::CommandSource source) OVERRIDE; bool ManageHMICommand(const commands::MessageSharedPtr message, diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index e491f09466..4cd1a7764f 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -2367,6 +2367,8 @@ bool ApplicationManagerImpl::Stop() { LOG4CXX_DEBUG(logger_, "Unloading policy library."); GetPolicyHandler().UnloadPolicyLibrary(); + rpc_service_->Stop(); + return true; } diff --git a/src/components/application_manager/src/rpc_protection_manager_impl.cc b/src/components/application_manager/src/rpc_protection_manager_impl.cc index 8ff00eb3c5..4afceb9e5b 100644 --- a/src/components/application_manager/src/rpc_protection_manager_impl.cc +++ b/src/components/application_manager/src/rpc_protection_manager_impl.cc @@ -61,6 +61,10 @@ bool RPCProtectionManagerImpl::CheckPolicyEncryptionFlag( LOG4CXX_AUTO_TRACE(logger_); const auto& policy_encryption_flag_getter = policy_handler_.PolicyEncryptionFlagGetter(); + if (!policy_encryption_flag_getter) { + LOG4CXX_ERROR(logger_, "Policy Encryption Flag getter is not inited"); + return false; + } const std::string function_name = policy_encryption_flag_getter->GetPolicyFunctionName(function_id); LOG4CXX_DEBUG(logger_, "Function for check is " << function_name); diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc index 67538fcaeb..79b2cbd752 100644 --- a/src/components/application_manager/src/rpc_service_impl.cc +++ b/src/components/application_manager/src/rpc_service_impl.cc @@ -68,6 +68,13 @@ RPCServiceImpl::RPCServiceImpl( RPCServiceImpl::~RPCServiceImpl() {} +void RPCServiceImpl::Stop() { + LOG4CXX_AUTO_TRACE(logger_); + + messages_to_mobile_.Shutdown(); + messages_to_hmi_.Shutdown(); +} + EncryptionFlagCheckResult RPCServiceImpl::IsEncryptionRequired( const smart_objects::SmartObject& message, std::shared_ptr<Application> app, diff --git a/src/components/application_manager/test/application_manager_impl_test.cc b/src/components/application_manager/test/application_manager_impl_test.cc index bfd815cd8b..ff1a9b047d 100644 --- a/src/components/application_manager/test/application_manager_impl_test.cc +++ b/src/components/application_manager/test/application_manager_impl_test.cc @@ -1128,6 +1128,15 @@ TEST_F(ApplicationManagerImplTest, StartStopAudioPassThru) { } } +TEST_F(ApplicationManagerImplTest, + StopApplicationManager_ExpectStopRPCService) { + EXPECT_CALL(*mock_policy_handler_, UnloadPolicyLibrary()); + + EXPECT_CALL(*mock_rpc_service_, Stop()); + + app_manager_impl_->Stop(); +} + TEST_F(ApplicationManagerImplTest, UnregisterAnotherAppDuringAudioPassThru) { std::string dummy_file_name; ON_CALL(mock_application_manager_settings_, recording_file_name()) diff --git a/src/components/include/application_manager/rpc_service.h b/src/components/include/application_manager/rpc_service.h index fb1d280880..4a80733ee7 100644 --- a/src/components/include/application_manager/rpc_service.h +++ b/src/components/include/application_manager/rpc_service.h @@ -102,6 +102,11 @@ class RPCService { const std::map<std::string, SMember>& members) = 0; /** + * @brief Stop RPC service by shutting down hmi and mobile message queues + */ + virtual void Stop() = 0; + + /** * @brief set_protocol_handler * @param handler * set protocol handler diff --git a/src/components/include/test/application_manager/mock_rpc_service.h b/src/components/include/test/application_manager/mock_rpc_service.h index bdbd3d17c7..ed06b930d8 100644 --- a/src/components/include/test/application_manager/mock_rpc_service.h +++ b/src/components/include/test/application_manager/mock_rpc_service.h @@ -43,6 +43,8 @@ class MockRPCService : public application_manager::rpc_service::RPCService { void(const hmi_apis::FunctionID::eType& function_id, const hmi_apis::messageType::eType& message_type, const std::map<std::string, SMember>& members)); + + MOCK_METHOD0(Stop, void()); }; } // namespace application_manager_test } // namespace components |