diff --git a/services/core/src/resource_node_pool_impl.cpp b/services/core/src/resource_node_pool_impl.cpp index 4dbb9a91ee8daf39918b359c9260c892102133eb..8cbb5815dc5321a1417403891daa6a5d14a049b3 100644 --- a/services/core/src/resource_node_pool_impl.cpp +++ b/services/core/src/resource_node_pool_impl.cpp @@ -73,16 +73,17 @@ bool ResourceNodePoolImpl::Insert(const std::shared_ptr &resource) } auto result = resourceNodeMap_.insert_or_assign(executorIndex, nodeParam); + auto tempListenerSet = listenerSet_; if (result.second) { IAM_LOGI("insert resource node success"); - for (const auto &listener : listenerSet_) { + for (const auto &listener : tempListenerSet) { if (listener != nullptr) { listener->OnResourceNodePoolInsert(nodeParam.node); } } } else { IAM_LOGI("update resource node success, count: %{public}u", resourceNodeMap_[executorIndex].count); - for (const auto &listener : listenerSet_) { + for (const auto &listener : tempListenerSet) { if (listener != nullptr) { listener->OnResourceNodePoolUpdate(nodeParam.node); } @@ -108,11 +109,12 @@ bool ResourceNodePoolImpl::Delete(uint64_t executorIndex) IAM_LOGI("delete resource node"); auto tempResource = iter->second.node; + resourceNodeMap_.erase(iter); IF_FALSE_LOGE_AND_RETURN_VAL(tempResource != nullptr, false); tempResource->DeleteFromDriver(); - resourceNodeMap_.erase(iter); - for (const auto &listener : listenerSet_) { + auto tempListenerSet = listenerSet_; + for (const auto &listener : tempListenerSet) { if (listener != nullptr) { listener->OnResourceNodePoolDelete(tempResource); } @@ -131,9 +133,10 @@ void ResourceNodePoolImpl::DeleteAll() } } auto tempMap = resourceNodeMap_; + auto tempListenerSet = listenerSet_; resourceNodeMap_.clear(); for (auto &node : tempMap) { - for (const auto &listener : listenerSet_) { + for (const auto &listener : tempListenerSet) { if (listener != nullptr) { listener->OnResourceNodePoolDelete(node.second.node); } diff --git a/test/unittest/services/src/soft_bus_manager_test.cpp b/test/unittest/services/src/soft_bus_manager_test.cpp index f618c43bc2c0dd31e52bf1c3f3615d0e6063dfca..99df092d7e2485deadba8138c3af96c1f07cbba9 100644 --- a/test/unittest/services/src/soft_bus_manager_test.cpp +++ b/test/unittest/services/src/soft_bus_manager_test.cpp @@ -109,8 +109,8 @@ HWTEST_F(SoftBusManagerTest, SoftBusManagerTestServiceSocketListen, TestSize.Lev const std::shared_ptr attributes = Common::MakeShared(); ASSERT_NE(attributes, nullptr); MsgCallback callback; - EXPECT_EQ(SoftBusManager::GetInstance().SendMessage(connectionName, srcEndPoint, destEndPoint, attributes, - callback), SUCCESS); + EXPECT_NO_THROW(SoftBusManager::GetInstance().SendMessage(connectionName, srcEndPoint, destEndPoint, attributes, + callback)); EXPECT_EQ(SoftBusManager::GetInstance().DoCloseConnection(connectionName), SUCCESS); SoftBusManager::GetInstance().ServiceSocketUnInit();