From 74da3f217d6e4e1a6d867fca8f7046dba01b72a7 Mon Sep 17 00:00:00 2001 From: zhuruigan Date: Tue, 29 Jul 2025 11:32:02 +0800 Subject: [PATCH] modify cancel for periodicTask Signed-off-by: zhuruigan Change-Id: Ia23c883f443ab46113831e1bfaf510c0ac7b8ff1 --- js_concurrent_module/taskpool/taskpool.cpp | 5 ++ js_concurrent_module/taskpool/test/test.cpp | 6 ++ js_concurrent_module/taskpool/test/test.h | 1 + .../taskpool/test/test_taskpool.cpp | 61 +++++++++++++++++++ 4 files changed, 73 insertions(+) diff --git a/js_concurrent_module/taskpool/taskpool.cpp b/js_concurrent_module/taskpool/taskpool.cpp index 68d2ae1a..9ab01447 100644 --- a/js_concurrent_module/taskpool/taskpool.cpp +++ b/js_concurrent_module/taskpool/taskpool.cpp @@ -436,6 +436,11 @@ void TaskPool::HandleTaskResultInner(Task* task) napi_get_undefined(task->env_, &napiTaskResult); } reinterpret_cast(task->env_)->DecreaseSubEnvCounter(); + if (task->IsPeriodicTask() && task->taskState_ == ExecuteState::CANCELED) { + TaskManager::GetInstance().DecreaseSendDataRefCount(task->env_, task->taskId_); + NAPI_CALL_RETURN_VOID(task->env_, napi_close_handle_scope(task->env_, scope)); + return; + } bool success = ((status == napi_ok) && (task->taskState_ != ExecuteState::CANCELED)) && (task->success_); task->taskState_ = ExecuteState::ENDING; task->isCancelToFinish_ = false; diff --git a/js_concurrent_module/taskpool/test/test.cpp b/js_concurrent_module/taskpool/test/test.cpp index f43ddaa1..048df955 100755 --- a/js_concurrent_module/taskpool/test/test.cpp +++ b/js_concurrent_module/taskpool/test/test.cpp @@ -1081,4 +1081,10 @@ void NativeEngineTest::SetTotalTaskNum(uint32_t num) TaskManager& taskManager = TaskManager::GetInstance(); taskManager.totalTaskNum_ = num; } + +void NativeEngineTest::HandleTaskResultInner(void* data) +{ + Task* task = reinterpret_cast(data); + TaskPool::HandleTaskResultInner(task); +} } // namespace Commonlibrary::Concurrent::TaskPoolModule \ No newline at end of file diff --git a/js_concurrent_module/taskpool/test/test.h b/js_concurrent_module/taskpool/test/test.h index d59a32a9..85c9b1a1 100644 --- a/js_concurrent_module/taskpool/test/test.h +++ b/js_concurrent_module/taskpool/test/test.h @@ -99,6 +99,7 @@ public: static void DecreaseTaskNum(); static void ResetPerformIdleState(napi_env env); static void SetTotalTaskNum(uint32_t num); + static void HandleTaskResultInner(void* data); class ExceptionScope { public: diff --git a/js_concurrent_module/taskpool/test/test_taskpool.cpp b/js_concurrent_module/taskpool/test/test_taskpool.cpp index 1e7bff49..6963d6e5 100644 --- a/js_concurrent_module/taskpool/test/test_taskpool.cpp +++ b/js_concurrent_module/taskpool/test/test_taskpool.cpp @@ -6633,4 +6633,65 @@ HWTEST_F(NativeEngineTest, TaskpoolTest326, testing::ext::TestSize.Level0) napi_value exception = nullptr; napi_get_and_clear_last_exception(env, &exception); ASSERT_TRUE(exception == nullptr); +} + +HWTEST_F(NativeEngineTest, TaskpoolTest330, testing::ext::TestSize.Level0) +{ + napi_env env = (napi_env)engine_; + ExceptionScope scope(env); + Task* task = new Task(); + task->env_ = env; + task->taskId_ = 330; + task->taskType_ = TaskType::COMMON_TASK; + napi_value obj = NapiHelper::CreateObject(env); + task->taskRef_ = NapiHelper::CreateReference(env, obj, 1); + TaskInfo* taskInfo = new TaskInfo(); + task->currentTaskInfo_ = taskInfo; + task->isPeriodicTask_ = true; + void* data = reinterpret_cast(task); + NativeEngineTest::HandleTaskResultInner(data); + napi_value exception = nullptr; + napi_get_and_clear_last_exception(env, &exception); + ASSERT_TRUE(exception == nullptr); +} + +HWTEST_F(NativeEngineTest, TaskpoolTest331, testing::ext::TestSize.Level0) +{ + napi_env env = (napi_env)engine_; + ExceptionScope scope(env); + Task* task = new Task(); + task->env_ = env; + task->taskId_ = 331; + task->taskType_ = TaskType::COMMON_TASK; + napi_value obj = NapiHelper::CreateObject(env); + task->taskRef_ = NapiHelper::CreateReference(env, obj, 1); + TaskInfo* taskInfo = new TaskInfo(); + task->currentTaskInfo_ = taskInfo; + void* data = reinterpret_cast(task); + NativeEngineTest::HandleTaskResultInner(data); + napi_value exception = nullptr; + napi_get_and_clear_last_exception(env, &exception); + ASSERT_TRUE(exception == nullptr); +} + +HWTEST_F(NativeEngineTest, TaskpoolTest332, testing::ext::TestSize.Level0) +{ + napi_env env = (napi_env)engine_; + ExceptionScope scope(env); + Task* task = new Task(); + task->env_ = env; + task->taskId_ = 332; + task->taskType_ = TaskType::COMMON_TASK; + task->taskState_ = ExecuteState::CANCELED; + napi_value obj = NapiHelper::CreateObject(env); + task->taskRef_ = NapiHelper::CreateReference(env, obj, 1); + TaskInfo* taskInfo = new TaskInfo(); + task->currentTaskInfo_ = taskInfo; + task->isPeriodicTask_ = true; + void* data = reinterpret_cast(task); + NativeEngineTest::HandleTaskResultInner(data); + napi_value exception = nullptr; + napi_get_and_clear_last_exception(env, &exception); + ASSERT_TRUE(exception == nullptr); + delete task; } \ No newline at end of file -- Gitee