From 9f9db4fa59600feb0184a0b86d506f26655b140a Mon Sep 17 00:00:00 2001 From: hwzhangchuang Date: Thu, 25 Apr 2024 22:17:18 +0800 Subject: [PATCH 1/2] modify mutex used problem Signed-off-by: hwzhangchuang --- common/include/input_hub.cpp | 4 ++-- .../sink/sinkmanager/src/distributed_input_sink_manager.cpp | 2 ++ .../transportbase/src/distributed_input_transport_base.cpp | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/common/include/input_hub.cpp b/common/include/input_hub.cpp index 13a766f..ec78286 100644 --- a/common/include/input_hub.cpp +++ b/common/include/input_hub.cpp @@ -1266,8 +1266,8 @@ std::vector InputHub::GetSharingDevices() void InputHub::GetSharedMousePathByDhId(const std::vector &dhIds, std::string &sharedMousePath, std::string &sharedMouseDhId) { - DHLOGI("GetSharedMousePathByDhId: devices_.size:%{public}zu,", devices_.size()); std::lock_guard deviceLock(devicesMutex_); + DHLOGI("GetSharedMousePathByDhId: devices_.size:%{public}zu,", devices_.size()); for (const auto &dhId : dhIds) { for (const auto &[id, device] : devices_) { if (device == nullptr) { @@ -1290,8 +1290,8 @@ void InputHub::GetSharedMousePathByDhId(const std::vector &dhIds, s void InputHub::GetSharedKeyboardPathsByDhIds(const std::vector &dhIds, std::vector &sharedKeyboardPaths, std::vector &sharedKeyboardDhIds) { - DHLOGI("GetSharedKeyboardPathsByDhIds: devices_.size:%{public}zu,", devices_.size()); std::lock_guard deviceLock(devicesMutex_); + DHLOGI("GetSharedKeyboardPathsByDhIds: devices_.size:%{public}zu,", devices_.size()); for (const auto &dhId : dhIds) { for (const auto &[id, device] : devices_) { if (device == nullptr) { diff --git a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp index 8df9119..80faa00 100644 --- a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp +++ b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp @@ -695,6 +695,7 @@ int32_t DistributedInputSinkManager::RegisterGetSinkScreenInfosCallback( uint32_t DistributedInputSinkManager::GetSinkScreenInfosCbackSize() { + std::lock_guard lock(mutex_); return getSinkScreenInfosCallbacks_.size(); } @@ -948,6 +949,7 @@ void DistributedInputSinkManager::CallBackScreenInfoChange() } nlohmann::json screenMsg(transInfos); std::string str = screenMsg.dump(); + std::lock_guard lock(mutex_); for (const auto &iter : getSinkScreenInfosCallbacks_) { iter->OnResult(str); } diff --git a/services/transportbase/src/distributed_input_transport_base.cpp b/services/transportbase/src/distributed_input_transport_base.cpp index b9296cc..ad8a335 100644 --- a/services/transportbase/src/distributed_input_transport_base.cpp +++ b/services/transportbase/src/distributed_input_transport_base.cpp @@ -547,6 +547,7 @@ int32_t DistributedInputTransportBase::SendMsg(int32_t sessionId, std::string &m int32_t DistributedInputTransportBase::GetSessionIdByDevId(const std::string &srcId) { + std::unique_lock sessionLock(operationMutex_); std::map::iterator it = remoteDevSessionMap_.find(srcId); if (it != remoteDevSessionMap_.end()) { return it->second; -- Gitee From 9f1926dca196f49243fbdc692678ac7e934b0d1b Mon Sep 17 00:00:00 2001 From: hwzhangchuang Date: Thu, 25 Apr 2024 22:21:19 +0800 Subject: [PATCH 2/2] modify mutex bug Signed-off-by: hwzhangchuang --- services/transportbase/src/distributed_input_transport_base.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/transportbase/src/distributed_input_transport_base.cpp b/services/transportbase/src/distributed_input_transport_base.cpp index ad8a335..1721633 100644 --- a/services/transportbase/src/distributed_input_transport_base.cpp +++ b/services/transportbase/src/distributed_input_transport_base.cpp @@ -369,11 +369,13 @@ void DistributedInputTransportBase::RunSessionStateCallback(const std::string &r int32_t DistributedInputTransportBase::CountSession(const std::string &remoteDevId) { + std::unique_lock sessionLock(operationMutex_); return remoteDevSessionMap_.count(remoteDevId); } void DistributedInputTransportBase::EraseSessionId(const std::string &remoteDevId) { + std::unique_lock sessionLock(operationMutex_); remoteDevSessionMap_.erase(remoteDevId); } -- Gitee