diff --git a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp index e6eb78e703904c89c2593e266ac02308f91eba8b..84066fbddd5effb7accf3a80140486ad6aa47d78 100644 --- a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp +++ b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp @@ -296,12 +296,12 @@ int HdfRemoteAdapterAddSa(int32_t saId, struct HdfRemoteService *service) if (service == nullptr) { return HDF_ERR_INVALID_PARAM; } + + const int32_t waitTimes = 50; + const int32_t sleepInterval = 20000; OHOS::sptr saManager; { - saManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - const int32_t waitTimes = 50; - const int32_t sleepInterval = 20000; - for (uint32_t cnt = 1; cnt <= waitTimes; ++cnt) { + for (uint32_t cnt = 0; cnt < waitTimes; ++cnt) { HDF_LOGI("waiting for samgr... %{public}d", cnt); saManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (saManager != nullptr) { @@ -323,9 +323,23 @@ int HdfRemoteAdapterAddSa(int32_t saId, struct HdfRemoteService *service) OHOS::IPCObjectStub *stub = reinterpret_cast(remote.GetRefPtr()); stub->SetRequestSidFlag(true); #endif - int ret = saManager->AddSystemAbility(saId, holder->remote_); + int ret = HDF_FAILURE; + for (uint32_t cnt = 0; cnt < waitTimes; ++cnt) { + HDF_LOGI("waiting for addSa... %{public}d", cnt); + ret = saManager->AddSystemAbility(saId, holder->remote_); + if (ret == HDF_SUCCESS) { + HDF_LOGI("addsa %{public}d, success", saId); + break; + } + HDF_LOGI("AddSystemAbility failed, retry"); + usleep(sleepInterval); + } + if (ret != HDF_SUCCESS) { + HDF_LOGE("failed to addSa, waiting timeout"); + return ret; + } + (void)OHOS::IPCSkeleton::GetInstance().SetMaxWorkThreadNum(g_remoteThreadMax++); - HDF_LOGI("add sa %{public}d, ret = %{public}s", saId, (ret == 0) ? "succ" : "fail"); } return HDF_SUCCESS; } diff --git a/framework/core/manager/test/unittest/common/hdf_remote_adapter_test.cpp b/framework/core/manager/test/unittest/common/hdf_remote_adapter_test.cpp index 8355981452981e492f935dc4b55c7509e7f73126..8fa4436c57910c316c34fbfdc3bd50e2518996e9 100644 --- a/framework/core/manager/test/unittest/common/hdf_remote_adapter_test.cpp +++ b/framework/core/manager/test/unittest/common/hdf_remote_adapter_test.cpp @@ -67,7 +67,7 @@ HWTEST_F(HdfRemoteAdapterTest, HdfRemoteAdapterTest002, TestSize.Level1) ret = HdfRemoteAdapterAddService(serviceName, remoteService); ASSERT_TRUE(ret != HDF_SUCCESS); ret = HdfRemoteAdapterAddSa(-1, remoteService); - ASSERT_TRUE(ret == HDF_SUCCESS); + ASSERT_TRUE(ret != HDF_SUCCESS); HdfRemoteService *remote = HdfRemoteAdapterGetService(NULL); ASSERT_EQ(remote, nullptr);