diff options
author | Igor Gapchuk (GitHub) <41586842+IGapchuk@users.noreply.github.com> | 2020-09-30 22:27:24 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-30 15:27:24 -0400 |
commit | 876856f1f2a6956bb6d14f32a26d484c0fd52499 (patch) | |
tree | 2d882284bbdeabb81b7107618cca72eda15b348a | |
parent | efb3c1d5ecc3688db65110d3a3c10560d249f33e (diff) | |
download | sdl_core-876856f1f2a6956bb6d14f32a26d484c0fd52499.tar.gz |
Fix deadlock in connection_handler (#3496)
-rw-r--r-- | src/components/connection_handler/src/connection_handler_impl.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc index d4364af8df..827d6fa17e 100644 --- a/src/components/connection_handler/src/connection_handler_impl.cc +++ b/src/components/connection_handler/src/connection_handler_impl.cc @@ -465,10 +465,21 @@ void ConnectionHandlerImpl::OnSessionStartedCallback( return; } #endif // ENABLE_SECURITY - sync_primitives::AutoReadLock lock(connection_list_lock_); - ConnectionList::iterator it = - connection_list_.find(primary_connection_handle); - if (connection_list_.end() == it) { + + auto find_connection = + [this](const transport_manager::ConnectionUID& primary_connection_handle) + -> Connection* { + sync_primitives::AutoReadLock lock(connection_list_lock_); + auto it = connection_list_.find(primary_connection_handle); + if (it != connection_list_.end()) { + return it->second; + } + return nullptr; + }; + + Connection* connection = find_connection(primary_connection_handle); + + if (!connection) { SDL_LOG_ERROR("Unknown connection!"); protocol_handler_->NotifySessionStarted( context, @@ -477,7 +488,6 @@ void ConnectionHandlerImpl::OnSessionStartedCallback( return; } - Connection* connection = it->second; context.is_new_service_ = !connection->SessionServiceExists(session_id, service_type); |