diff --git a/services/implementation/include/dependency/softbus/softbus_connector.h b/services/implementation/include/dependency/softbus/softbus_connector.h index 718d7ddeb11f5c60b49d0887923b8beada28d987..18abee84e7e01b9f06f2c444399a417f1243a40d 100644 --- a/services/implementation/include/dependency/softbus/softbus_connector.h +++ b/services/implementation/include/dependency/softbus/softbus_connector.h @@ -123,6 +123,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); @@ -141,9 +144,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 0af9630944e8c84427f4f38b25a4923a7bf198fd..f21fb875d83009566d7b3e023a55f067c0a2749c 100644 --- a/services/implementation/src/dependency/softbus/softbus_connector.cpp +++ b/services/implementation/src/dependency/softbus/softbus_connector.cpp @@ -46,9 +46,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() @@ -420,18 +422,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 517a0aeeaba7c9c93ec2b4c62330344d647f7928..e6d46f95d02d9db4ecc343cea66a966289b9a9bf 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -279,7 +279,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 d88646d7c854b2ba978559e1f926d070eb21eae8..72bbda204c83f851997a0a2e71c77231f8b7c08d 100644 --- a/services/implementation/src/devicestate/dm_device_state_manager.cpp +++ b/services/implementation/src/devicestate/dm_device_state_manager.cpp @@ -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());