diff --git a/services/implementation/include/dependency/softbus/softbus_connector.h b/services/implementation/include/dependency/softbus/softbus_connector.h index 61a3fb1ae860cc7130916cd050f38f7c6a8df9df..be6e0468b7c5ca4dd2ba25a8a2c4c6001c39856a 100644 --- a/services/implementation/include/dependency/softbus/softbus_connector.h +++ b/services/implementation/include/dependency/softbus/softbus_connector.h @@ -135,6 +135,9 @@ public: void SetProcessInfoVec(std::vector processInfoVec); std::vector GetProcessInfo(); void ClearProcessInfo(); + void SetChangeProcessInfo(ProcessInfo processInfo); + std::vector GetChangeProcessInfo(); + void ClearChangeProcessInfo(); DmDeviceInfo GetDeviceInfoByDeviceId(const std::string &deviceId); void DeleteOffLineTimer(std::string &udidHash); void SyncAclList(int32_t userId, std::string credId, int32_t sessionKeyId, int32_t aclId); @@ -168,9 +171,11 @@ private: std::shared_ptr deviceStateManagerCallback_; static std::unordered_map deviceUdidMap_; static std::vector processInfoVec_; + static std::vector processChangeInfoVec_; static std::mutex discoveryDeviceInfoMutex_; static std::mutex deviceUdidLocks_; static std::mutex processInfoVecMutex_; + static std::mutex processChangeInfoVecMutex_; static std::shared_ptr connectorCallback_; }; } // namespace DistributedHardware diff --git a/services/implementation/src/dependency/softbus/softbus_connector.cpp b/services/implementation/src/dependency/softbus/softbus_connector.cpp index 70774a429f219d2f7548a76c1cf80b992838b95c..df2d1e41160f12737d8e4e98ba302fc6005b9027 100644 --- a/services/implementation/src/dependency/softbus/softbus_connector.cpp +++ b/services/implementation/src/dependency/softbus/softbus_connector.cpp @@ -54,9 +54,11 @@ std::string SoftbusConnector::remoteUdidHash_ = ""; std::map> SoftbusConnector::discoveryDeviceInfoMap_ = {}; std::unordered_map SoftbusConnector::deviceUdidMap_ = {}; std::vector SoftbusConnector::processInfoVec_ = {}; +std::vector SoftbusConnector::processChangeInfoVec_ = {}; std::mutex SoftbusConnector::discoveryDeviceInfoMutex_; std::mutex SoftbusConnector::deviceUdidLocks_; std::mutex SoftbusConnector::processInfoVecMutex_; +std::mutex SoftbusConnector::processChangeInfoVecMutex_; std::shared_ptr SoftbusConnector::connectorCallback_ = nullptr; SoftbusConnector::SoftbusConnector() @@ -683,18 +685,39 @@ void SoftbusConnector::SetProcessInfoVec(std::vector processInfoVec std::vector SoftbusConnector::GetProcessInfo() { - LOGI("In"); + LOGI("SoftbusConnector::GetProcessInfo"); std::lock_guard lock(processInfoVecMutex_); return processInfoVec_; } void SoftbusConnector::ClearProcessInfo() { - LOGI("In"); + LOGI("SoftbusConnector::ClearProcessInfo"); std::lock_guard lock(processInfoVecMutex_); processInfoVec_.clear(); } +void SoftbusConnector::SetChangeProcessInfo(ProcessInfo processInfo) +{ + LOGI("SoftbusConnector::SetChangeProcessInfo"); + std::lock_guard lock(processChangeInfoVecMutex_); + processChangeInfoVec_.push_back(processInfo); +} + +std::vector SoftbusConnector::GetChangeProcessInfo() +{ + LOGI("SoftbusConnector::GetChangeProcessInfo"); + std::lock_guard lock(processChangeInfoVecMutex_); + return processChangeInfoVec_; +} + +void SoftbusConnector::ClearChangeProcessInfo() +{ + LOGI("SoftbusConnector::ClearChangeProcessInfo"); + std::lock_guard lock(processChangeInfoVecMutex_); + processChangeInfoVec_.clear(); +} + void SoftbusConnector::HandleDeviceOnline(std::string deviceId, int32_t authForm) { LOGI("SoftbusConnector::HandleDeviceOnline"); diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 816260c03492c62b897622d8c55165fc05cc05dd..47e88bcfb023407d0d8011e7694e943b53a4d182 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -735,7 +735,7 @@ void DeviceManagerServiceImpl::HandleDeviceStatusChange(DmDeviceState devState, ProcessInfo processInfo; processInfo.pkgName = std::string(DM_PKG_NAME); processInfo.userId = MultipleUserConnector::GetFirstForegroundUserId(); - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetChangeProcessInfo(processInfo); deviceStateMgr_->HandleDeviceStatusChange(devState, devInfo); } } diff --git a/services/implementation/src/devicestate/dm_device_state_manager.cpp b/services/implementation/src/devicestate/dm_device_state_manager.cpp index fc1b99b73c3e186b78eee07e675384fec016b0b2..3b107ae5157e90be6610e88a8be208174ebd2f14 100644 --- a/services/implementation/src/devicestate/dm_device_state_manager.cpp +++ b/services/implementation/src/devicestate/dm_device_state_manager.cpp @@ -161,7 +161,7 @@ void DmDeviceStateManager::HandleDeviceStatusChange(DmDeviceState devState, DmDe case DEVICE_INFO_CHANGED: ChangeDeviceInfo(devInfo); ProcessDeviceStateChange(devState, devInfo); - softbusConnector_->ClearProcessInfo(); + softbusConnector_->ClearChangeProcessInfo(); break; default: LOGE("HandleDeviceStatusChange error, unknown device state = %{public}d", devState); @@ -175,7 +175,12 @@ void DmDeviceStateManager::ProcessDeviceStateChange(const DmDeviceState devState GetAnonyString(devInfo.networkId).c_str()); CHECK_NULL_VOID(softbusConnector_); CHECK_NULL_VOID(listener_); - std::vector processInfoVec = softbusConnector_->GetProcessInfo(); + std::vector processInfoVec; + if (devState == DEVICE_INFO_CHANGED) { + processInfoVec = softbusConnector_->GetChangeProcessInfo(); + } else { + processInfoVec = softbusConnector_->GetProcessInfo(); + } for (const auto &item : processInfoVec) { if (!item.pkgName.empty()) { LOGI("ProcessDeviceStateChange, pkgName = %{public}s", item.pkgName.c_str());