summaryrefslogtreecommitdiff
path: root/src/components/application_manager
diff options
context:
space:
mode:
authorAndrey Oleynik <aoleynik@luxoft.com>2016-03-09 15:59:31 +0200
committerAndrey Oleynik <aoleynik@luxoft.com>2016-03-11 13:25:34 +0200
commit5ef805732bc8944ab9f5b0fe8a46919d59de94ab (patch)
tree96a75da7d6fa2839a00afb50802bff2c35271d62 /src/components/application_manager
parente76f8e79294b55a58889ca9b6f90027918e7e25d (diff)
downloadsdl_core-5ef805732bc8944ab9f5b0fe8a46919d59de94ab.tar.gz
Fixes issue with SDL data resetting during MASTER_RESET
There were two deadlocks during unregistering of all apps because of MASTER_RESET: - ApplicationManagerImpl::UnregisterAllApplications vs ConnectionHandler::CloseSessionServices - ApplicationManagerImpl::UnregisterApplication vs ApplicationManagerImpl::RemoveAppFromTTSGlobalPropertiesList That was causing reset flow blocking and data had not been cleaned up completely. Closes-bug: APPLINK-22117 Conflicts: src/components/application_manager/include/application_manager/application_manager_impl.h src/components/application_manager/src/application_manager_impl.cc src/components/connection_handler/include/connection_handler/connection_handler_impl.h src/components/connection_handler/src/connection_handler_impl.cc
Diffstat (limited to 'src/components/application_manager')
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h5
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc10
2 files changed, 14 insertions, 1 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 f75c403899..dd9cd33fa3 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
@@ -1305,6 +1305,11 @@ class ApplicationManagerImpl : public ApplicationManager,
void RemoveAppsWaitingForRegistration(
const connection_handler::DeviceHandle handle);
+ /**
+ * @brief Clears TTS global properties list of apps
+ */
+ void ClearTTSGlobalPropertiesList();
+
private:
/**
* @brief List of applications
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index d9d5348df7..d5f9f49e71 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -1219,7 +1219,7 @@ void ApplicationManagerImpl::SendMessageToMobile(
mobile_so_factory().attachSchema(*message, false);
LOG4CXX_INFO(logger_, "Attached schema to message, result if valid: "
<< message->isValid());
-
+
// Messages to mobile are not yet prioritized so use default priority value
utils::SharedPtr<Message> message_to_send(new Message(
protocol_handler::MessagePriority::kDefault));
@@ -2218,6 +2218,8 @@ void ApplicationManagerImpl::UnregisterAllApplications() {
Compare<eType, NEQ, ALL>(unregister_reason_,
IGNITION_OFF, MASTER_RESET, FACTORY_DEFAULTS);
+ ClearTTSGlobalPropertiesList();
+
{ // A local scope to limit accessor's lifetime and release app list lock.
ApplicationListAccessor accessor;
ApplictionSetConstIt it = accessor.begin();
@@ -3139,6 +3141,12 @@ bool ApplicationManagerImpl::IsReadWriteAllowed(
return true;
}
+void ApplicationManagerImpl::ClearTTSGlobalPropertiesList() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(tts_global_properties_app_list_lock_);
+ tts_global_properties_app_list_.clear();
+}
+
ApplicationManagerImpl::ApplicationListAccessor::~ApplicationListAccessor() {
}