summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Oleynik (GitHub) <aoleynik@luxoft.com>2017-10-27 15:50:10 +0300
committerAndriy Byzhynar <AByzhynar@luxoft.com>2018-01-18 12:03:50 +0200
commit02fd128d2790f68b1c8acb6e2115e6984ccc0c8b (patch)
treed0b4e41af58f977716b542cd2bbabc503a1e318f
parent0127696c46a24ade4e76e32807175e0cfa5103a0 (diff)
downloadsdl_core-02fd128d2790f68b1c8acb6e2115e6984ccc0c8b.tar.gz
Fixes deadlock on resume data saving during transport switch
Issue was happening due to - resume data restoring thread was acquiring app subscription lock and then application list lock - transport switching thread was acquiring application lock and was saving resume data and trying to get subscription lock Now after filtering switching application from application list its lock will be released
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 4f9cccb4d9..aea66aa27c 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -1074,12 +1074,14 @@ void ApplicationManagerImpl::OnDeviceSwitchingStart(
const std::string& device_uid) {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(reregister_wait_list_lock_);
- auto apps_data_accessor = applications();
+ {
+ auto apps_data_accessor = applications();
- std::copy_if(apps_data_accessor.GetData().begin(),
- apps_data_accessor.GetData().end(),
- std::back_inserter(reregister_wait_list_),
- std::bind1st(std::ptr_fun(&device_id_comparator), device_uid));
+ std::copy_if(apps_data_accessor.GetData().begin(),
+ apps_data_accessor.GetData().end(),
+ std::back_inserter(reregister_wait_list_),
+ std::bind1st(std::ptr_fun(&device_id_comparator), device_uid));
+ }
for (auto i = reregister_wait_list_.begin(); reregister_wait_list_.end() != i;
++i) {