From d8d786a4ddbc9025fab2b0d9fe08d839de573c89 Mon Sep 17 00:00:00 2001 From: tangfan Date: Fri, 22 Jul 2022 09:52:49 +0800 Subject: [PATCH 1/6] fix AccessManagerFuzzTest and MonitorTaskTimer Signed-off-by: tangfan --- .../include/task/monitor_task_timer.h | 7 +++- .../src/task/monitor_task_timer.cpp | 40 +++++++++++++++---- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h b/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h index e9692c14..c0f8787c 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h @@ -16,6 +16,7 @@ #ifndef DISTRIBUTED_HARDWARE_FWK_MONITOR_TASK_TIMER_H #define DISTRIBUTED_HARDWARE_FWK_MONITOR_TASK_TIMER_H +#include #include #include #include @@ -33,13 +34,17 @@ public: ~MonitorTaskTimer(); void StartTimer(); void StopTimer(); + void StartEventRunner(); private: MonitorTaskTimer(); void Execute(const std::shared_ptr eventHandler); private: - std::thread monitorTaskTimerThread_; + std::thread eventHandlerThread_; + std::mutex monitorTaskTimerMutex_; + std::condition_variable monitorTaskTimerCond_; + std::shared_ptr eventHandler_; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp index b27f0c18..24670683 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp @@ -27,7 +27,6 @@ namespace OHOS { namespace DistributedHardware { IMPLEMENT_SINGLE_INSTANCE(MonitorTaskTimer); namespace { - const std::string MONITOR_TASK_TIMER_HANDLER = "monitor_task_timer_handler"; const std::string MONITOR_TASK_TIMER_ID = "monitor_task_timer_id"; constexpr int32_t DELAY_TIME_MS = 5000; } @@ -37,31 +36,56 @@ namespace { MonitorTaskTimer::MonitorTaskTimer() { DHLOGI("MonitorTaskTimer construction"); + if (!eventHandler_) { + eventHandlerThread_ = std::thread(&MonitorTaskTimer::StartEventRunner, this); + std::unique_lock lock(monitorTaskTimerMutex_); + monitorTaskTimerCond_.wait(lock, [this] { + return eventHandler_ != nullptr; + }); + } } MonitorTaskTimer::~MonitorTaskTimer() { DHLOGI("MonitorTaskTimer destruction"); + StopTimer(); +} + +void MonitorTaskTimer::StartEventRunner() +{ + auto busRunner = AppExecFwk::EventRunner::Create(false); + { + std::lock_guard lock(monitorTaskTimerMutex_); + eventHandler_ = std::make_shared(busRunner); + } + monitorTaskTimerCond_.notify_all(); + busRunner->Run(); } void MonitorTaskTimer::StartTimer() { DHLOGI("start"); - auto busRunner = OHOS::AppExecFwk::EventRunner::Create(MONITOR_TASK_TIMER_HANDLER); - auto eventHandler = std::make_shared(busRunner); - if (eventHandler == nullptr) { - DHLOGI("eventHandler construction, this point is empty"); + std::lock_guard lock(monitorTaskTimerMutex_); + if (eventHandler_ == nullptr) { + DHLOGE("eventHandler is nullptr!"); return; } - monitorTaskTimerThread_ = std::thread(&MonitorTaskTimer::Execute, this, eventHandler); + auto monitorTaskTimer = [this] {Execute(eventHandler_);}; + eventHandler_->PostTask(monitorTaskTimer, MONITOR_TASK_TIMER_ID, DELAY_TIME_MS); } void MonitorTaskTimer::StopTimer() { DHLOGI("start"); - if (monitorTaskTimerThread_.joinable()) { - monitorTaskTimerThread_.join(); + std::lock_guard lock(monitorTaskTimerMutex_); + if (eventHandler_ != nullptr) { + eventHandler_->RemoveTask(MONITOR_TASK_TIMER_ID); + eventHandler_->GetEventRunner()->Stop(); + } + if (eventHandlerThread_.joinable()) { + eventHandlerThread_.join(); } + eventHandler_ = nullptr; DHLOGI("end"); } -- Gitee From 95bcf9e0aa3b5fb0d9b14a7e7a45fc6a3c848bef Mon Sep 17 00:00:00 2001 From: tangfan Date: Fri, 22 Jul 2022 09:57:07 +0800 Subject: [PATCH 2/6] fix AccessManagerFuzzTest and MonitorTaskTimer Signed-off-by: tangfan --- .../fuzztest/accessmanager_fuzzer/accessmanager_fuzzer.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/distributedhardwarefwkservice/test/fuzztest/accessmanager_fuzzer/accessmanager_fuzzer.cpp b/services/distributedhardwarefwkservice/test/fuzztest/accessmanager_fuzzer/accessmanager_fuzzer.cpp index f181c732..d91c89b1 100644 --- a/services/distributedhardwarefwkservice/test/fuzztest/accessmanager_fuzzer/accessmanager_fuzzer.cpp +++ b/services/distributedhardwarefwkservice/test/fuzztest/accessmanager_fuzzer/accessmanager_fuzzer.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include "access_manager.h" #include "distributed_hardware_errno.h" @@ -27,7 +28,10 @@ namespace OHOS { namespace DistributedHardware { -constexpr uint16_t TEST_DEV_TYPE_PAD = 0x11; +namespace { + constexpr uint16_t TEST_DEV_TYPE_PAD = 0x11; + constexpr uint32_t SLEEP_TIME_US = 10 * 1000; +} void AccessManagerFuzzTest(const uint8_t* data, size_t size) { @@ -40,6 +44,7 @@ void AccessManagerFuzzTest(const uint8_t* data, size_t size) DistributedHardwareManagerFactory::GetInstance().SendOnLineEvent( networkId, uuid, TEST_DEV_TYPE_PAD); + usleep(SLEEP_TIME_US); } } } -- Gitee From 768cb77c1b01dc1258baccd9cc2ac263a7ff1403 Mon Sep 17 00:00:00 2001 From: tangfan Date: Sat, 23 Jul 2022 16:04:55 +0800 Subject: [PATCH 3/6] fix AccessManagerFuzzTest and MonitorTaskTimer Signed-off-by: tangfan --- .../src/task/monitor_task_timer.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp index 24670683..f09a3a07 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp @@ -36,13 +36,6 @@ namespace { MonitorTaskTimer::MonitorTaskTimer() { DHLOGI("MonitorTaskTimer construction"); - if (!eventHandler_) { - eventHandlerThread_ = std::thread(&MonitorTaskTimer::StartEventRunner, this); - std::unique_lock lock(monitorTaskTimerMutex_); - monitorTaskTimerCond_.wait(lock, [this] { - return eventHandler_ != nullptr; - }); - } } MonitorTaskTimer::~MonitorTaskTimer() @@ -66,6 +59,13 @@ void MonitorTaskTimer::StartTimer() { DHLOGI("start"); std::lock_guard lock(monitorTaskTimerMutex_); + if (!eventHandler_) { + eventHandlerThread_ = std::thread(&MonitorTaskTimer::StartEventRunner, this); + std::unique_lock lock(monitorTaskTimerMutex_); + monitorTaskTimerCond_.wait(lock, [this] { + return eventHandler_ != nullptr; + }); + } if (eventHandler_ == nullptr) { DHLOGE("eventHandler is nullptr!"); return; -- Gitee From f185eb2959189df1e26071917e54ffbda19cbe88 Mon Sep 17 00:00:00 2001 From: tangfan Date: Sat, 23 Jul 2022 16:34:55 +0800 Subject: [PATCH 4/6] fix AccessManagerFuzzTest and MonitorTaskTimer Signed-off-by: tangfan --- .../src/task/monitor_task_timer.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp index f09a3a07..79ca999d 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp @@ -36,12 +36,20 @@ namespace { MonitorTaskTimer::MonitorTaskTimer() { DHLOGI("MonitorTaskTimer construction"); + if (!eventHandler_) { + eventHandlerThread_ = std::thread(&MonitorTaskTimer::StartEventRunner, this); + std::unique_lock lock(monitorTaskTimerMutex_); + monitorTaskTimerCond_.wait(lock, [this] { + return eventHandler_ != nullptr; + }); + } } MonitorTaskTimer::~MonitorTaskTimer() { DHLOGI("MonitorTaskTimer destruction"); StopTimer(); + eventHandler_ = nullptr; } void MonitorTaskTimer::StartEventRunner() @@ -59,13 +67,6 @@ void MonitorTaskTimer::StartTimer() { DHLOGI("start"); std::lock_guard lock(monitorTaskTimerMutex_); - if (!eventHandler_) { - eventHandlerThread_ = std::thread(&MonitorTaskTimer::StartEventRunner, this); - std::unique_lock lock(monitorTaskTimerMutex_); - monitorTaskTimerCond_.wait(lock, [this] { - return eventHandler_ != nullptr; - }); - } if (eventHandler_ == nullptr) { DHLOGE("eventHandler is nullptr!"); return; @@ -85,7 +86,6 @@ void MonitorTaskTimer::StopTimer() if (eventHandlerThread_.joinable()) { eventHandlerThread_.join(); } - eventHandler_ = nullptr; DHLOGI("end"); } -- Gitee From 7ebcb3fe7afa6855d487ac02797190ebc9267af2 Mon Sep 17 00:00:00 2001 From: tangfan Date: Mon, 25 Jul 2022 08:43:07 +0800 Subject: [PATCH 5/6] fix AccessManagerFuzzTest and MonitorTaskTimer Signed-off-by: tangfan --- .../include/task/monitor_task_timer.h | 2 ++ .../src/task/monitor_task_timer.cpp | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h b/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h index c0f8787c..c3942035 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/monitor_task_timer.h @@ -39,6 +39,8 @@ public: private: MonitorTaskTimer(); void Execute(const std::shared_ptr eventHandler); + void InitTimer(); + void ReleaseTimer(); private: std::thread eventHandlerThread_; diff --git a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp index 79ca999d..7b544e9e 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp @@ -36,24 +36,37 @@ namespace { MonitorTaskTimer::MonitorTaskTimer() { DHLOGI("MonitorTaskTimer construction"); - if (!eventHandler_) { +} + +MonitorTaskTimer::~MonitorTaskTimer() +{ + DHLOGI("MonitorTaskTimer destruction"); + ReleaseTimer(); +} + +void MonitorTaskTimer::InitTimer() +{ + DHLOGI("start"); + if (eventHandler_ == nullptr) { eventHandlerThread_ = std::thread(&MonitorTaskTimer::StartEventRunner, this); std::unique_lock lock(monitorTaskTimerMutex_); monitorTaskTimerCond_.wait(lock, [this] { return eventHandler_ != nullptr; }); } + DHLOGI("end"); } -MonitorTaskTimer::~MonitorTaskTimer() +void MonitorTaskTimer::ReleaseTimer() { - DHLOGI("MonitorTaskTimer destruction"); + DHLOGI("start"); StopTimer(); - eventHandler_ = nullptr; + DHLOGI("end"); } void MonitorTaskTimer::StartEventRunner() { + DHLOGI("start"); auto busRunner = AppExecFwk::EventRunner::Create(false); { std::lock_guard lock(monitorTaskTimerMutex_); @@ -61,11 +74,13 @@ void MonitorTaskTimer::StartEventRunner() } monitorTaskTimerCond_.notify_all(); busRunner->Run(); + DHLOGI("end"); } void MonitorTaskTimer::StartTimer() { DHLOGI("start"); + InitTimer(); std::lock_guard lock(monitorTaskTimerMutex_); if (eventHandler_ == nullptr) { DHLOGE("eventHandler is nullptr!"); @@ -86,6 +101,7 @@ void MonitorTaskTimer::StopTimer() if (eventHandlerThread_.joinable()) { eventHandlerThread_.join(); } + eventHandler_ = nullptr; DHLOGI("end"); } -- Gitee From de399d844517753909d2b1eaabbe7e98296644e6 Mon Sep 17 00:00:00 2001 From: tangfan Date: Mon, 25 Jul 2022 16:27:08 +0800 Subject: [PATCH 6/6] fix AccessManagerFuzzTest and MonitorTaskTimer Signed-off-by: tangfan --- .../src/task/monitor_task_timer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp index 7b544e9e..3f69e276 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/monitor_task_timer.cpp @@ -47,9 +47,9 @@ MonitorTaskTimer::~MonitorTaskTimer() void MonitorTaskTimer::InitTimer() { DHLOGI("start"); + std::unique_lock lock(monitorTaskTimerMutex_); if (eventHandler_ == nullptr) { eventHandlerThread_ = std::thread(&MonitorTaskTimer::StartEventRunner, this); - std::unique_lock lock(monitorTaskTimerMutex_); monitorTaskTimerCond_.wait(lock, [this] { return eventHandler_ != nullptr; }); -- Gitee