diff --git a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h index 91c8df2c3ed613166f1e4b3069d510517ae372ec..c42313127d7bdf98c863e8ca134291aa43b51cd3 100644 --- a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h +++ b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2024 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -25,12 +25,16 @@ namespace OHOS { namespace DistributedHardware { +enum class InitLocalState : uint32_t { + UNINIT, + INITING, + INITED, +}; class DistributedHardwareManagerFactory { DECLARE_SINGLE_INSTANCE(DistributedHardwareManagerFactory); public: bool InitLocalDevInfo(); - bool IsInit(); int32_t SendOnLineEvent(const std::string &networkId, const std::string &uuid, const std::string &udid, uint16_t deviceType, int32_t osType); int32_t SendOffLineEvent(const std::string &networkId, const std::string &uuid, const std::string &udid, @@ -48,8 +52,8 @@ private: void ExitDHFWK(); private: - std::atomic isInit_ = false; std::atomic flagUnInit_ = false; + InitLocalState initLocalStatus_ = InitLocalState::UNINIT; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp index e3ba58399317c9106d6a89646792b39f9cb6966b..2d3271f9f4d1eff5db64392c271cc60f06fa67a4 100644 --- a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp +++ b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp @@ -80,14 +80,15 @@ bool DistributedHardwareManagerFactory::InitLocalDevInfo() bool DistributedHardwareManagerFactory::Init() { DHLOGI("start"); - auto initResult = DistributedHardwareManager::GetInstance().Initialize(); - if (initResult != DH_FWK_SUCCESS) { - DHLOGE("Initialize failed, errCode = %{public}d", initResult); - return false; + if (initLocalStatus_ == InitLocalState::UNINIT) { + initLocalStatus_ = InitLocalState::INITING; + DistributedHardwareManager::GetInstance().Initialize(); + initLocalStatus_ = InitLocalState::INITED; + DHLOGI("success"); + return true; } - isInit_.store(true); - DHLOGI("success"); - return true; + DHLOGE("device Initializing or Initialization completed"); + return false; } void DistributedHardwareManagerFactory::UnInit() @@ -99,7 +100,7 @@ void DistributedHardwareManagerFactory::UnInit() // release all the resources synchronously DistributedHardwareManager::GetInstance().Release(); - isInit_.store(false); + initLocalStatus_ = InitLocalState::UNINIT; flagUnInit_.store(false); DHTraceEnd(); CheckExitSAOrNot(); @@ -149,11 +150,6 @@ void DistributedHardwareManagerFactory::CheckExitSAOrNot() } } -bool DistributedHardwareManagerFactory::IsInit() -{ - return isInit_.load(); -} - int32_t DistributedHardwareManagerFactory::SendOnLineEvent(const std::string &networkId, const std::string &uuid, const std::string &udid, uint16_t deviceType, int32_t osType) { @@ -178,7 +174,7 @@ int32_t DistributedHardwareManagerFactory::SendOnLineEvent(const std::string &ne DHContext::GetInstance().AddOnlineDevice(udid, uuid, networkId); DHContext::GetInstance().AddRealTimeOnlineDeviceNetworkId(networkId); - if (!isInit_.load() && !Init()) { + if (initLocalStatus_ == InitLocalState::UNINIT && !Init()) { DHLOGE("distributedHardwareMgr is null"); return ERR_DH_FWK_HARDWARE_MANAGER_INIT_FAILED; } @@ -208,7 +204,7 @@ int32_t DistributedHardwareManagerFactory::SendOffLineEvent(const std::string &n if (!IsIdLengthValid(networkId) || !IsIdLengthValid(uuid) || !IsIdLengthValid(udid)) { return ERR_DH_FWK_PARA_INVALID; } - if (!isInit_.load() && !Init()) { + if (initLocalStatus_ == InitLocalState::UNINIT && !Init()) { DHLOGE("distributedHardwareMgr is null"); return ERR_DH_FWK_HARDWARE_MANAGER_INIT_FAILED; } diff --git a/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp b/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp index bec1707dc0f83a0448be4fbccdbce1a913385dc5..32f6656327203d131ce9936f23f0f710a99ab3d6 100644 --- a/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp +++ b/services/distributedhardwarefwkservice/test/unittest/common/accessmanager/access_manager_test.cpp @@ -47,10 +47,7 @@ public: void TearDown(); }; -void AccessManagerTest::SetUp() -{ - DistributedHardwareManagerFactory::GetInstance().isInit_.store(true); -} +void AccessManagerTest::SetUp() {} void AccessManagerTest::TearDown() {}