diff --git a/services/sink/sinkmanager/include/distributed_input_sink_manager.h b/services/sink/sinkmanager/include/distributed_input_sink_manager.h index ac7a6cd59fa3f8f08b685a4dce47bc6d1e6ef6fd..ee7776e282a70bf496d7e50d189852d023c20e5f 100644 --- a/services/sink/sinkmanager/include/distributed_input_sink_manager.h +++ b/services/sink/sinkmanager/include/distributed_input_sink_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2023 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 diff --git a/services/sink/sinkmanager/test/sinkmanagerunittest/distributed_input_sinkmanager_test.h b/services/sink/sinkmanager/test/sinkmanagerunittest/distributed_input_sinkmanager_test.h index 9d14f7d0489cce0c303d57e23c103ab293198fc4..9be71bf1f8fdc1afb987acd06c348b9e122bb8a9 100644 --- a/services/sink/sinkmanager/test/sinkmanagerunittest/distributed_input_sinkmanager_test.h +++ b/services/sink/sinkmanager/test/sinkmanagerunittest/distributed_input_sinkmanager_test.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2024 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 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 diff --git a/utils/include/dinput_context.h b/utils/include/dinput_context.h index 610b3a39ebaffad181d00b502de193365fe81c51..af692f2cdbe3f6c724bb3dfe8193345d0aa3922d 100644 --- a/utils/include/dinput_context.h +++ b/utils/include/dinput_context.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Copyright (c) 2022-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 diff --git a/utils/src/dinput_context.cpp b/utils/src/dinput_context.cpp index 6a9c5e193597c250c8007590a00e173f0395fa66..95ac3936c0f3473d284309b72ad014ae5c9ed6d8 100644 --- a/utils/src/dinput_context.cpp +++ b/utils/src/dinput_context.cpp @@ -90,11 +90,13 @@ void DInputContext::CleanExceptionalInfo(const SrcScreenInfo &srcScreenInfo) std::string uuid = srcScreenInfo.uuid; int32_t sessionId = srcScreenInfo.sessionId; std::lock_guard lock(sinkMapMutex_); - for (const auto &[id, sinkInfo] : sinkScreenInfoMap_) { - auto srcInfo = sinkInfo.srcScreenInfo; + for (auto iter = sinkScreenInfoMap_.begin(); iter != sinkScreenInfoMap_.end();) { + auto srcInfo = iter->second.srcScreenInfo; if ((std::strcmp(srcInfo.uuid.c_str(), uuid.c_str()) == 0) && (srcInfo.sessionId != sessionId)) { - sinkScreenInfoMap_.erase(id); - DHLOGI("CleanExceptionalInfo screenInfoKey: %{public}s, sessionId: %{public}d", id.c_str(), sessionId); + DHLOGI("CleanExceptionalInfo key: %{public}s, sessionId: %{public}d", iter->first.c_str(), sessionId); + iter = sinkScreenInfoMap_.erase(iter); + } else { + ++iter; } } } diff --git a/utils/test/unittest/dinput_context_test.cpp b/utils/test/unittest/dinput_context_test.cpp index 4f4206364837da6f89180e42b2596800fdb7e1c4..0ab6e2bc8d6b1ba0bf09fc9c4394a34e2c46e815 100644 --- a/utils/test/unittest/dinput_context_test.cpp +++ b/utils/test/unittest/dinput_context_test.cpp @@ -113,6 +113,42 @@ HWTEST_F(DInputContextTest, CleanExceptionalInfo002, testing::ext::TestSize.Leve DInputContext::GetInstance().RemoveSinkScreenInfo(sourceWinId); } +HWTEST_F(DInputContextTest, CleanExceptionalInfo003, testing::ext::TestSize.Level1) +{ + std::string sourceWinId = "hello"; + SrcScreenInfo srcScreenInfo; + srcScreenInfo.uuid = "uuid1"; + srcScreenInfo.sessionId = 1; + + SinkScreenInfo sinkInfo; + sinkInfo.srcScreenInfo.uuid = "uuid2"; + sinkInfo.srcScreenInfo.sessionId = 1; + + DInputContext::GetInstance().sinkScreenInfoMap_[sourceWinId] = sinkInfo; + EXPECT_EQ(DInputContext::GetInstance().sinkScreenInfoMap_.size(), 1); + DInputContext::GetInstance().CleanExceptionalInfo(srcScreenInfo); + + DInputContext::GetInstance().RemoveSinkScreenInfo(sourceWinId); +} + +HWTEST_F(DInputContextTest, CleanExceptionalInfo004, testing::ext::TestSize.Level1) +{ + std::string sourceWinId = "hello"; + SrcScreenInfo srcScreenInfo; + srcScreenInfo.uuid = "uuid1"; + srcScreenInfo.sessionId = 1; + + SinkScreenInfo sinkInfo; + sinkInfo.srcScreenInfo.uuid = "uuid1"; + sinkInfo.srcScreenInfo.sessionId = 2; + + DInputContext::GetInstance().sinkScreenInfoMap_[sourceWinId] = sinkInfo; + EXPECT_EQ(DInputContext::GetInstance().sinkScreenInfoMap_.size(), 1); + DInputContext::GetInstance().CleanExceptionalInfo(srcScreenInfo); + + DInputContext::GetInstance().RemoveSinkScreenInfo(sourceWinId); +} + HWTEST_F(DInputContextTest, GetSinkScreenInfo002, testing::ext::TestSize.Level1) { std::string sourceWinId = "hello";