summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Keeler <jacob.keeler@livioradio.com>2019-09-27 14:46:21 -0400
committerGitHub <noreply@github.com>2019-09-27 14:46:21 -0400
commit66888d419aeb753d7e323d31dc25e59ce4eab6e7 (patch)
tree4c09ec686583bb5625b502348f5081fd961ce629
parentec63b3b2b379ab0fe62ef74c628605ff719bc682 (diff)
parent46e8b4a9badea2e5bd4e9d06bdbb3be089e26e77 (diff)
downloadsdl_core-66888d419aeb753d7e323d31dc25e59ce4eab6e7.tar.gz
Merge pull request #3056 from smartdevicelink/fix/fix_random_sdl_crash
Fix SDL crash on app service unpublishing
-rw-r--r--src/components/application_manager/src/app_service_manager.cc18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/components/application_manager/src/app_service_manager.cc b/src/components/application_manager/src/app_service_manager.cc
index a85921a8cd..afcc7ae1dd 100644
--- a/src/components/application_manager/src/app_service_manager.cc
+++ b/src/components/application_manager/src/app_service_manager.cc
@@ -223,13 +223,21 @@ bool AppServiceManager::UnpublishAppService(const std::string service_id) {
void AppServiceManager::UnpublishServices(const uint32_t connection_key) {
LOG4CXX_AUTO_TRACE(logger_);
LOG4CXX_DEBUG(logger_, "Unpublishing all app services: " << connection_key);
- sync_primitives::AutoLock lock(published_services_lock_);
- for (auto it = published_services_.begin(); it != published_services_.end();
- ++it) {
- if (it->second.connection_key == connection_key) {
- UnpublishAppService(it->first);
+
+ std::list<std::string> app_published_services;
+ {
+ sync_primitives::AutoLock lock(published_services_lock_);
+ for (auto it = published_services_.begin(); it != published_services_.end();
+ ++it) {
+ if (it->second.connection_key == connection_key) {
+ app_published_services.push_back(it->first);
+ }
}
}
+
+ for (auto& service_id : app_published_services) {
+ UnpublishAppService(service_id);
+ }
}
void AppServiceManager::OnAppActivated(ApplicationConstSharedPtr app) {