diff options
author | Jacob Keeler <jacob.keeler@livioradio.com> | 2019-09-27 14:46:21 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-27 14:46:21 -0400 |
commit | 66888d419aeb753d7e323d31dc25e59ce4eab6e7 (patch) | |
tree | 4c09ec686583bb5625b502348f5081fd961ce629 | |
parent | ec63b3b2b379ab0fe62ef74c628605ff719bc682 (diff) | |
parent | 46e8b4a9badea2e5bd4e9d06bdbb3be089e26e77 (diff) | |
download | sdl_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.cc | 18 |
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) { |