summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAGaliuzov <AGaliuzov@luxoft.com>2016-03-18 11:32:18 +0200
committerAGaliuzov <AGaliuzov@luxoft.com>2016-03-18 11:32:18 +0200
commitd2548bd65da2ea10e90b5f33698413c175c6e6cd (patch)
tree96a75da7d6fa2839a00afb50802bff2c35271d62
parente76f8e79294b55a58889ca9b6f90027918e7e25d (diff)
parent5ef805732bc8944ab9f5b0fe8a46919d59de94ab (diff)
downloadsdl_core-d2548bd65da2ea10e90b5f33698413c175c6e6cd.tar.gz
Merge pull request #413 from LuxoftSDL/hotfix/Fix_SDL_clean_up_during_MASTER_RESET
Fixes issue with SDL data resetting during MASTER_RESET
-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
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_impl.h5
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc21
4 files changed, 28 insertions, 13 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() {
}
diff --git a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
index 8ddc6e5a53..4ead673663 100644
--- a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
+++ b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
@@ -51,6 +51,7 @@
#include "utils/lock.h"
#include "utils/stl_utils.h"
#include "utils/singleton.h"
+#include "utils/rwlock.h"
/**
* \namespace connection_handler
@@ -402,7 +403,7 @@ class ConnectionHandlerImpl : public ConnectionHandler,
* @return TRUE if session and connection exist otherwise returns FALSE
*/
virtual bool ProtocolVersionUsed(uint32_t connection_id,
- uint8_t session_id, uint8_t& protocol_version);
+ uint8_t session_id, uint8_t& protocol_version);
private:
/**
* \brief Default class constructor
@@ -446,7 +447,7 @@ class ConnectionHandlerImpl : public ConnectionHandler,
* \brief Lock for applications list
*/
mutable sync_primitives::Lock connection_list_lock_;
- mutable sync_primitives::Lock connection_handler_observer_lock_;
+ mutable sync_primitives::RWLock connection_handler_observer_lock_;
/**
* \brief Cleans connection list on destruction
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc
index 70a50c5890..0fdb0c68bf 100644
--- a/src/components/connection_handler/src/connection_handler_impl.cc
+++ b/src/components/connection_handler/src/connection_handler_impl.cc
@@ -72,7 +72,7 @@ ConnectionHandlerImpl::ConnectionHandlerImpl()
transport_manager_(NULL),
protocol_handler_(NULL),
connection_list_lock_(true),
- connection_handler_observer_lock_(true),
+ connection_handler_observer_lock_(),
connection_list_deleter_(&connection_list_) {
}
@@ -93,7 +93,7 @@ void ConnectionHandlerImpl::set_connection_handler_observer(
ConnectionHandlerObserver *observer) {
LOG4CXX_DEBUG(logger_, "ConnectionHandlerImpl::set_connection_handler_observer() "
<< observer);
- sync_primitives::AutoLock lock(connection_handler_observer_lock_);
+ sync_primitives::AutoWriteLock write_lock(connection_handler_observer_lock_);
if (!observer) {
LOG4CXX_WARN(logger_, "Set Null pointer to observer.");
}
@@ -124,14 +124,14 @@ void ConnectionHandlerImpl::set_protocol_handler(
void ConnectionHandlerImpl::OnDeviceListUpdated(
const std::vector<transport_manager::DeviceInfo>&) {
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock lock(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
connection_handler_observer_->OnDeviceListUpdated(device_list_);
}
}
void ConnectionHandlerImpl::OnFindNewApplicationsRequest() {
- sync_primitives::AutoLock lock(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
connection_handler_observer_->OnFindNewApplicationsRequest();
}
@@ -150,7 +150,7 @@ void ConnectionHandlerImpl::OnDeviceAdded(
device_info.device_handle(),
Device(device_info.device_handle(), device_info.name(),
device_info.mac_address(), device_info.connection_type())));
- sync_primitives::AutoLock lock(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
connection_handler_observer_->OnDeviceListUpdated(device_list_);
}
@@ -182,7 +182,7 @@ void ConnectionHandlerImpl::OnDeviceRemoved(
}
device_list_.erase(device_info.device_handle());
- sync_primitives::AutoLock lock(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
connection_handler_observer_->RemoveDevice(device_info.device_handle());
connection_handler_observer_->OnDeviceListUpdated(device_list_);
@@ -346,7 +346,7 @@ uint32_t ConnectionHandlerImpl::OnSessionStartedCallback(
*hash_id = protocol_handler::HASH_ID_NOT_SUPPORTED;
}
}
- sync_primitives::AutoLock lock2(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
const uint32_t session_key = KeyFromPair(connection_handle, new_session_id);
const bool success = connection_handler_observer_->OnServiceStartedCallback(
@@ -438,7 +438,7 @@ uint32_t ConnectionHandlerImpl::OnSessionEndedCallback(
}
}
- sync_primitives::AutoLock lock2(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
connection_handler_observer_->OnServiceEndedCallback(
session_key, service_type, CloseSessionReason::kCommon);
@@ -657,7 +657,7 @@ void ConnectionHandlerImpl::StartDevicesDiscovery() {
return;
}
transport_manager_->SearchDevices();
- sync_primitives::AutoLock lock(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
connection_handler_observer_->OnDeviceListUpdated(device_list_);
}
@@ -787,6 +787,7 @@ void ConnectionHandlerImpl::CloseSession(ConnectionHandle connection_handle,
}
}
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (!connection_handler_observer_) {
LOG4CXX_ERROR(logger_, "Connection handler observer not found");
return;
@@ -923,7 +924,7 @@ void ConnectionHandlerImpl::OnConnectionEnded(
connection_list_.erase(itr);
connection_list_lock_.Release();
- sync_primitives::AutoLock lock2(connection_handler_observer_lock_);
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_ && connection.get() != NULL) {
const SessionMap session_map = connection->session_map();