summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2019-01-14 16:27:22 -0500
committerJackLivio <jack@livio.io>2019-01-14 16:27:22 -0500
commit6385c985c7a8b07d2ded26548fa484ca1189b82a (patch)
treee63098babc5387b4c0a92fc9ba53de314f8aba82
parent14b49f0178e62acff40fff1698ef92cb30093a81 (diff)
downloadsdl_core-6385c985c7a8b07d2ded26548fa484ca1189b82a.tar.gz
Add lock for pending device map
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h2
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc5
2 files changed, 7 insertions, 0 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 08421615d4..8c062f9016 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
@@ -1468,6 +1468,8 @@ class ApplicationManagerImpl
DeviceMap secondary_transport_devices_cache_;
+ mutable std::shared_ptr<sync_primitives::RecursiveLock>
+ pending_device_map_lock_ptr_;
std::map<std::string, std::string> pending_device_map_;
#ifdef TELEMETRY_MONITOR
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 97d5e66b6b..16ab32dcd2 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -168,6 +168,7 @@ ApplicationManagerImpl::ApplicationManagerImpl(
, navi_close_app_timeout_(am_settings.stop_streaming_timeout())
, navi_end_stream_timeout_(am_settings.stop_streaming_timeout())
, state_ctrl_(*this)
+ , pending_device_map_lock_ptr_(std::make_shared<sync_primitives::RecursiveLock>())
, application_list_update_timer_(
"AM ListUpdater",
new TimerTaskImpl<ApplicationManagerImpl>(
@@ -820,6 +821,7 @@ void ApplicationManagerImpl::RefreshCloudAppInformation() {
bool enabled = true;
// Store old device map and clear the current map
+ pending_device_map_lock_ptr_->Acquire();
std::map<std::string, std::string> old_device_map = pending_device_map_;
pending_device_map_ = std::map<std::string, std::string>();
for (; it != end; ++it) {
@@ -841,6 +843,7 @@ void ApplicationManagerImpl::RefreshCloudAppInformation() {
connection_handler().AddCloudAppDevice(*it, endpoint, cloud_transport_type);
}
+ pending_device_map_lock_ptr_->Release();
int removed_app_count = 0;
// Clear out devices for existing cloud apps that were disabled
@@ -898,10 +901,12 @@ void ApplicationManagerImpl::CreatePendingApplication(
std::string hybrid_app_preference_str = "";
bool enabled = true;
std::string name = device_info.name();
+ pending_device_map_lock_ptr_->Acquire();
auto it = pending_device_map_.find(name);
if (it == pending_device_map_.end()) {
return;
}
+ pending_device_map_lock_ptr_->Release();
const std::string policy_app_id = it->second;