From b221461acada86f3d34fa798550bdd0b49acdc2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Wed, 2 Jul 2025 16:23:45 +0800 Subject: [PATCH 1/4] fix task MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- .../collect/device_status_collect_manager.cpp | 2 +- .../source/collect/device_timed_collect.cpp | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/services/samgr/native/source/collect/device_status_collect_manager.cpp b/services/samgr/native/source/collect/device_status_collect_manager.cpp index 6803cd33..6ca3a0ff 100644 --- a/services/samgr/native/source/collect/device_status_collect_manager.cpp +++ b/services/samgr/native/source/collect/device_status_collect_manager.cpp @@ -311,7 +311,7 @@ void DeviceStatusCollectManager::PostTask(std::function callback) void DeviceStatusCollectManager::PostDelayTask(std::function callback, int32_t delayTime) { - HILOGI("DeviceStaMgr PostDelayTask begin"); + HILOGI("DeviceStaMgr PostDelayTask begin, delayTime:%{public}d", delayTime); if (delayTime < 0 || delayTime > std::numeric_limits::max() / TO_MILLISECOND) { HILOGE("DeviceStaMgr PostDelayTask Failed : delayTime out of range %{public}d", delayTime); return; diff --git a/services/samgr/native/source/collect/device_timed_collect.cpp b/services/samgr/native/source/collect/device_timed_collect.cpp index a9a34b91..6958bdf3 100644 --- a/services/samgr/native/source/collect/device_timed_collect.cpp +++ b/services/samgr/native/source/collect/device_timed_collect.cpp @@ -115,8 +115,14 @@ void DeviceTimedCollect::ProcessPersistenceLoopTask(int64_t disTime, int64_t tri return; } persitenceLoopTasks_[interval] = [this, interval] () { - ReportEventByTimeInfo(interval, true); - PostPersistenceDelayTask(persitenceLoopTasks_[interval], interval, interval); + lock_guard autoLock(persitenceLoopEventSetLock_); + if (persitenceLoopTasks_.find(interval) != persitenceLoopTasks_.end()) { + HILOGI("DeviceTimedCollect Persistence ReportEvent interval: %{public}" PRId64, interval); + ReportEventByTimeInfo(interval, true); + PostPersistenceDelayTask(persitenceLoopTasks_[interval], interval, interval); + } else { + HILOGI("DeviceTimedCollect Persistence interval %{public}" PRId64 " has been remove", interval); + } }; if (disTime <= 0) { ReportEventByTimeInfo(interval, true); @@ -194,8 +200,14 @@ void DeviceTimedCollect::PostPersistenceLoopTaskLocked(int32_t interval) return; } persitenceLoopTasks_[interval] = [this, interval] () { - ReportEventByTimeInfo(interval, true); - PostPersistenceDelayTask(persitenceLoopTasks_[interval], interval, interval); + lock_guard autoLock(persitenceLoopEventSetLock_); + if (persitenceLoopTasks_.find(interval) != persitenceLoopTasks_.end()) { + HILOGI("DeviceTimedCollect Persistence ReportEvent interval: %{public}d", interval); + ReportEventByTimeInfo(interval, true); + PostPersistenceDelayTask(persitenceLoopTasks_[interval], interval, interval); + } else { + HILOGI("DeviceTimedCollect Persistence interval %{public}d has been remove", interval); + } }; PostPersistenceDelayTask(persitenceLoopTasks_[interval], interval, interval); } -- Gitee From b638c8e84f0c8ac1b6dc95ced9ef76fe0e0854cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Mon, 7 Jul 2025 22:15:18 +0800 Subject: [PATCH 2/4] commit msg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- .../src/device_timed_collect_test.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp b/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp index cd383149..dd240406 100644 --- a/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp +++ b/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp @@ -865,6 +865,25 @@ HWTEST_F(DeviceTimedCollectTest, ProcessPersistenceLoopTask001, TestSize.Level3) DTEST_LOG << " ProcessPersistenceLoopTask001 end" << std::endl; } +HWTEST_F(DeviceTimedCollectTest, PostPersistenceLoopTaskLocked002, TestSize.Level3) +{ + DTEST_LOG << " PostPersistenceLoopTaskLocked002 begin" << std::endl; + sptr collect = new DeviceStatusCollectManager(); + collect->collectHandler_ = std::make_shared("collect"); + sptr deviceTimedCollect = new DeviceTimedCollect(collect); + EXPECT_EQ(true, deviceTimedCollect != nullptr); + deviceTimedCollect->preferencesUtil_ = PreferencesUtil::GetInstance(); + TimeInfo info; + info.awake = false; + info.normal = true; + deviceTimedCollect->timeInfos_[1] = info; + deviceTimedCollect->PostPersistenceLoopTaskLocked(1); + deviceTimedCollect->persitenceLoopTasks_.erase(1); + usleep(1500 * 1000); + EXPECT_TRUE(deviceTimedCollect->persitenceLoopTasks_.empty()); + DTEST_LOG << " PostPersistenceLoopTaskLocked002 end" << std::endl; +} + HWTEST_F(DeviceTimedCollectTest, PostNonPersistenceLoopTaskLocked001, TestSize.Level3) { DTEST_LOG << " PostNonPersistenceLoopTaskLocked001 begin" << std::endl; -- Gitee From bd324a98203a61093c4f4350f5b35e4ac1b7b7d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Tue, 8 Jul 2025 10:48:14 +0800 Subject: [PATCH 3/4] commit msg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- .../source/collect/device_timed_collect.cpp | 13 ++++++++--- .../src/device_timed_collect_test.cpp | 23 +++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/services/samgr/native/source/collect/device_timed_collect.cpp b/services/samgr/native/source/collect/device_timed_collect.cpp index 6958bdf3..2e10d34c 100644 --- a/services/samgr/native/source/collect/device_timed_collect.cpp +++ b/services/samgr/native/source/collect/device_timed_collect.cpp @@ -100,8 +100,11 @@ void DeviceTimedCollect::ProcessPersistenceTimedTask(int64_t disTime, std::strin void DeviceTimedCollect::ProcessPersistenceLoopTask(int64_t disTime, int64_t triggerTime, std::string strInterval) { int64_t interval = atoi(strInterval.c_str()); - if (persitenceLoopTasks_.count(interval) > 0) { - return; + { + lock_guard autoLock(persitenceLoopEventSetLock_); + if (persitenceLoopTasks_.count(interval) > 0) { + return; + } } #ifdef PREFERENCES_ENABLE int64_t currentTime = TimeUtils::GetTimestamp(); @@ -114,7 +117,7 @@ void DeviceTimedCollect::ProcessPersistenceLoopTask(int64_t disTime, int64_t tri HILOGW("interval is not true"); return; } - persitenceLoopTasks_[interval] = [this, interval] () { + auto task = [this, interval] () { lock_guard autoLock(persitenceLoopEventSetLock_); if (persitenceLoopTasks_.find(interval) != persitenceLoopTasks_.end()) { HILOGI("DeviceTimedCollect Persistence ReportEvent interval: %{public}" PRId64, interval); @@ -124,6 +127,10 @@ void DeviceTimedCollect::ProcessPersistenceLoopTask(int64_t disTime, int64_t tri HILOGI("DeviceTimedCollect Persistence interval %{public}" PRId64 " has been remove", interval); } }; + { + lock_guard autoLock(persitenceLoopEventSetLock_); + persitenceLoopTasks_[interval] = task; + } if (disTime <= 0) { ReportEventByTimeInfo(interval, true); // In order to enable the timer to start on time next time and make up for the missing time diff --git a/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp b/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp index dd240406..c68dc474 100644 --- a/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp +++ b/services/samgr/native/test/unittest/src/device_timed_collect_test.cpp @@ -865,9 +865,9 @@ HWTEST_F(DeviceTimedCollectTest, ProcessPersistenceLoopTask001, TestSize.Level3) DTEST_LOG << " ProcessPersistenceLoopTask001 end" << std::endl; } -HWTEST_F(DeviceTimedCollectTest, PostPersistenceLoopTaskLocked002, TestSize.Level3) +HWTEST_F(DeviceTimedCollectTest, PostPersistenceLoopTaskLocked001, TestSize.Level3) { - DTEST_LOG << " PostPersistenceLoopTaskLocked002 begin" << std::endl; + DTEST_LOG << " PostPersistenceLoopTaskLocked001 begin" << std::endl; sptr collect = new DeviceStatusCollectManager(); collect->collectHandler_ = std::make_shared("collect"); sptr deviceTimedCollect = new DeviceTimedCollect(collect); @@ -881,6 +881,25 @@ HWTEST_F(DeviceTimedCollectTest, PostPersistenceLoopTaskLocked002, TestSize.Leve deviceTimedCollect->persitenceLoopTasks_.erase(1); usleep(1500 * 1000); EXPECT_TRUE(deviceTimedCollect->persitenceLoopTasks_.empty()); + DTEST_LOG << " PostPersistenceLoopTaskLocked001 end" << std::endl; +} + +HWTEST_F(DeviceTimedCollectTest, PostPersistenceLoopTaskLocked002, TestSize.Level3) +{ + DTEST_LOG << " PostPersistenceLoopTaskLocked002 begin" << std::endl; + sptr collect = new DeviceStatusCollectManager(); + collect->collectHandler_ = std::make_shared("collect"); + sptr deviceTimedCollect = new DeviceTimedCollect(collect); + EXPECT_EQ(true, deviceTimedCollect != nullptr); + deviceTimedCollect->preferencesUtil_ = PreferencesUtil::GetInstance(); + TimeInfo info; + info.awake = false; + info.normal = true; + deviceTimedCollect->timeInfos_[1] = info; + deviceTimedCollect->PostPersistenceLoopTaskLocked(1); + EXPECT_FALSE(deviceTimedCollect->persitenceLoopTasks_.empty()); + usleep(1100 * 1000); + deviceTimedCollect->persitenceLoopTasks_.erase(1); DTEST_LOG << " PostPersistenceLoopTaskLocked002 end" << std::endl; } -- Gitee From ae471f713ec094a4fe007c91b6be909beec92952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=98=89=E5=AE=9D?= Date: Tue, 8 Jul 2025 03:34:38 +0000 Subject: [PATCH 4/4] update services/samgr/native/source/collect/device_timed_collect.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄嘉宝 --- services/samgr/native/source/collect/device_timed_collect.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/samgr/native/source/collect/device_timed_collect.cpp b/services/samgr/native/source/collect/device_timed_collect.cpp index 2e10d34c..53316706 100644 --- a/services/samgr/native/source/collect/device_timed_collect.cpp +++ b/services/samgr/native/source/collect/device_timed_collect.cpp @@ -209,11 +209,11 @@ void DeviceTimedCollect::PostPersistenceLoopTaskLocked(int32_t interval) persitenceLoopTasks_[interval] = [this, interval] () { lock_guard autoLock(persitenceLoopEventSetLock_); if (persitenceLoopTasks_.find(interval) != persitenceLoopTasks_.end()) { - HILOGI("DeviceTimedCollect Persistence ReportEvent interval: %{public}d", interval); + HILOGI("DeviceTimedCollect PostPersistence ReportEvent interval: %{public}d", interval); ReportEventByTimeInfo(interval, true); PostPersistenceDelayTask(persitenceLoopTasks_[interval], interval, interval); } else { - HILOGI("DeviceTimedCollect Persistence interval %{public}d has been remove", interval); + HILOGI("DeviceTimedCollect PostPersistence interval %{public}d has been remove", interval); } }; PostPersistenceDelayTask(persitenceLoopTasks_[interval], interval, interval); -- Gitee