summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksym Ked (GitHub) <41471947+mked-luxoft@users.noreply.github.com>2019-09-26 17:54:57 +0300
committerJackLivio <jack@livio.io>2019-09-26 10:54:57 -0400
commit35e6a7ec5bbcb27bd972a2db07a18c2294b1bc0c (patch)
tree584f9f9b3a63eb34697bae183998cac39ded3b43
parentbe88a0b1eac802335d3142d3fe008dc05900deba (diff)
downloadsdl_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
-rw-r--r--src/components/application_manager/include/application_manager/rpc_service_impl.h2
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc2
-rw-r--r--src/components/application_manager/src/rpc_protection_manager_impl.cc4
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc7
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc9
-rw-r--r--src/components/include/application_manager/rpc_service.h5
-rw-r--r--src/components/include/test/application_manager/mock_rpc_service.h2
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