diff --git a/services/source/sourcemanager/src/distributed_input_source_manager.cpp b/services/source/sourcemanager/src/distributed_input_source_manager.cpp index 38388ff06c070269d7573235ff0aa48a8493bcc9..d3df09391acf59a94823ef43e7b5aff48caa8065 100644 --- a/services/source/sourcemanager/src/distributed_input_source_manager.cpp +++ b/services/source/sourcemanager/src/distributed_input_source_manager.cpp @@ -1314,13 +1314,13 @@ void DistributedInputSourceManager::RunRelayUnprepareCallback(const std::string void DistributedInputSourceManager::RunUnprepareCallback(const std::string &devId, const int32_t &status) { FinishAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_UNPREPARE_START, DINPUT_UNPREPARE_TASK); - std::lock_guard lock(prepareMutex_); + std::lock_guard prepareLock(prepareMutex_); for (auto iter = unpreCallbacks_.begin(); iter != unpreCallbacks_.end(); ++iter) { if (iter->devId == devId) { DHLOGI("ProcessEvent DINPUT_SOURCE_MANAGER_UNPREPARE_MSG"); iter->unpreCallback->OnResult(devId, status); unpreCallbacks_.erase(iter); - std::lock_guard lock(whiteListMutex_); + std::lock_guard whiteListLock(whiteListMutex_); if (delWhiteListCallbacks_.size() == 0) { DHLOGE("ProcessEvent DINPUT_SOURCE_MANAGER_UNPREPARE_MSG delWhiteListCallback is null."); return; diff --git a/services/transportbase/include/distributed_input_transport_base.h b/services/transportbase/include/distributed_input_transport_base.h index 5e43dda5d9a5ccc712e8d7ce4454f6fcad89ca42..a39a0f6df4f7f3da196c4884a8ae6095b39b03c1 100644 --- a/services/transportbase/include/distributed_input_transport_base.h +++ b/services/transportbase/include/distributed_input_transport_base.h @@ -67,6 +67,7 @@ public: private: DistributedInputTransportBase() = default; ~DistributedInputTransportBase(); + void OnSessionOpenedError(int32_t sessionId, int32_t result); int32_t CheckDeviceSessionState(const std::string &remoteDevId); bool CheckRecivedData(const std::string &message); void HandleSession(int32_t sessionId, const std::string &message); diff --git a/services/transportbase/src/distributed_input_transport_base.cpp b/services/transportbase/src/distributed_input_transport_base.cpp index f89b47f9cfe206f3c240e7d0b7e25cc3016becbe..c9d29217d727be65b4fee008896f04a95b9fbe3b 100644 --- a/services/transportbase/src/distributed_input_transport_base.cpp +++ b/services/transportbase/src/distributed_input_transport_base.cpp @@ -325,13 +325,7 @@ int32_t DistributedInputTransportBase::OnSessionOpened(int32_t sessionId, int32_ DHLOGI("OnSessionOpened, sessionId: %d, result: %d", sessionId, result); FinishAsyncTrace(DINPUT_HITRACE_LABEL, DINPUT_OPEN_SESSION_START, DINPUT_OPEN_SESSION_TASK); if (result != DH_SUCCESS) { - std::string deviceId = GetDevIdBySessionId(sessionId); - DHLOGE("session open failed, sessionId: %d, result:%d, deviceId:%s", sessionId, result, - GetAnonyString(deviceId).c_str()); - std::unique_lock sessionLock(operationMutex_); - if (CountSession(deviceId) > 0) { - EraseSessionId(deviceId); - } + OnSessionOpenedError(sessionId, result); return DH_SUCCESS; } @@ -377,6 +371,18 @@ int32_t DistributedInputTransportBase::OnSessionOpened(int32_t sessionId, int32_ return DH_SUCCESS; } +void DistributedInputTransportBase::OnSessionOpenedError(int32_t sessionId, int32_t result) +{ + std::string deviceId = GetDevIdBySessionId(sessionId); + DHLOGE("session open failed, sessionId: %d, result:%d, deviceId:%s", sessionId, result, + GetAnonyString(deviceId).c_str()); + std::unique_lock sessionLock(operationMutex_); + if (CountSession(deviceId) > 0) { + EraseSessionId(deviceId); + } + return; +} + void DistributedInputTransportBase::OnSessionClosed(int32_t sessionId) { DHLOGI("OnSessionClosed, sessionId: %d", sessionId);