diff --git a/js_concurrent_module/taskpool/task_manager.cpp b/js_concurrent_module/taskpool/task_manager.cpp index 36d21b53e5ccedb3a14a33c6215393ee7b8f241c..36b8059ce9f57804b7aae786b858ae7121403bf1 100644 --- a/js_concurrent_module/taskpool/task_manager.cpp +++ b/js_concurrent_module/taskpool/task_manager.cpp @@ -833,8 +833,15 @@ void TaskManager::EnqueueTaskId(uint32_t taskId, Priority priority) return; } task->IncreaseTaskLifecycleCount(); - if (task->onEnqueuedCallBackInfo_ != nullptr) { - task->ExecuteListenerCallback(task->onEnqueuedCallBackInfo_, taskId); + ListenerCallBackInfo* info = nullptr; + { + std::lock_guard lock(task->taskMutex_); + info = task->onEnqueuedCallBackInfo_; + } + if (info != nullptr) { + task->ExecuteListenerCallback(info, taskId); + } else { // LOCV_EXCL_BR_LINE + HILOG_WARN("taskpool:: onEnqueuedCallBackInfo is null"); } } @@ -1003,6 +1010,8 @@ void TaskManager::RegisterCallback(napi_env env, uint32_t taskId, std::shared_pt std::lock_guard lock(callbackMutex_); if (callbackInfo != nullptr) { callbackInfo->type = type; + } else { // LOCV_EXCL_BR_LINE + HILOG_DEBUG("taskpool:: callbackInfo is null."); } callbackTable_[taskId] = callbackInfo; } diff --git a/js_concurrent_module/taskpool/taskpool.cpp b/js_concurrent_module/taskpool/taskpool.cpp index 68d2ae1a724e8f2eed8aa900a7036631bac29bba..26c0928b561f36161d0f3c1a7a38a7d260fe1dc5 100644 --- a/js_concurrent_module/taskpool/taskpool.cpp +++ b/js_concurrent_module/taskpool/taskpool.cpp @@ -107,8 +107,8 @@ void TaskPool::ExecuteOnReceiveDataCallback(CallbackInfo* callbackInfo, TaskResu { ObjectScope resultInfoScope(resultInfo, false); napi_status status = napi_ok; - std::string traceLabel = "ExecuteOnReceiveDataCallback type: " + callbackInfo->type + - ", taskId: " + std::to_string(resultInfo->taskId); + std::string traceLabel = "ExecuteOnReceiveDataCallback type: " + callbackInfo->type + + ", taskId: " + std::to_string(resultInfo->taskId); HITRACE_HELPER_METER_NAME(traceLabel); auto env = callbackInfo->hostEnv; CallbackScope callbackScope(env, resultInfo, status); @@ -534,7 +534,7 @@ void TaskPool::UpdateGroupInfoByResult(napi_env env, Task* task, napi_value res, task->ExecuteListenerCallback(task->onExecutionSucceededCallBackInfo_, task->taskId_); } } - } else { + } else { // LOCV_EXCL_BR_LINE napi_value res = nullptr; napi_get_element(env, resArr, groupInfo->GetFailedIndex(), &res); napi_reject_deferred(env, groupInfo->deferred, res); diff --git a/js_concurrent_module/taskpool/test/test.cpp b/js_concurrent_module/taskpool/test/test.cpp index f43ddaa16be5920c482078a9571ba552cde2b103..7374b31d358d2f42dddb89acd02456bf7863da15 100755 --- a/js_concurrent_module/taskpool/test/test.cpp +++ b/js_concurrent_module/taskpool/test/test.cpp @@ -1081,4 +1081,11 @@ void NativeEngineTest::SetTotalTaskNum(uint32_t num) TaskManager& taskManager = TaskManager::GetInstance(); taskManager.totalTaskNum_ = num; } + +void NativeEngineTest::ExecuteOnReceiveDataCallback(void* callbackInfo, void* resultInfo) +{ + CallbackInfo* cbInfo = reinterpret_cast(callbackInfo); + TaskResultInfo* resInfo = reinterpret_cast(resultInfo); + TaskPool::ExecuteOnReceiveDataCallback(cbInfo, resInfo); +} } // 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 d59a32a96993dc2d5b9ebc98d33dafd5b4c06bb9..85772fe9728c24c46f70b5bc45c17fe11ce9e3b5 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 ExecuteOnReceiveDataCallback(void* callbackInfo, void* resultInfo); class ExceptionScope { public: diff --git a/js_concurrent_module/taskpool/test/test_taskpool.cpp b/js_concurrent_module/taskpool/test/test_taskpool.cpp index 3e1b1b69840d30d5711985431a4fff22517315da..de27fc20be1afbb0863999fd720014222122a9b1 100644 --- a/js_concurrent_module/taskpool/test/test_taskpool.cpp +++ b/js_concurrent_module/taskpool/test/test_taskpool.cpp @@ -2048,9 +2048,9 @@ HWTEST_F(NativeEngineTest, TaskpoolTest131, testing::ext::TestSize.Level0) { napi_env env = (napi_env)engine_; ExceptionScope scope(env); - Task* task = new Task(); - uint32_t taskId = TaskManager::GetInstance().CalculateTaskId(reinterpret_cast(task)); - task->taskId_ = taskId; + Task* task1 = new Task(); + uint32_t taskId1 = TaskManager::GetInstance().CalculateTaskId(reinterpret_cast(task1)); + task1->taskId_ = taskId1; napi_value thisValue = NapiHelper::CreateObject(env); napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0); @@ -2058,11 +2058,20 @@ HWTEST_F(NativeEngineTest, TaskpoolTest131, testing::ext::TestSize.Level0) Worker* worker = reinterpret_cast(NativeEngineTest::WorkerConstructor(env)); void* args = nullptr; - TaskResultInfo* resultInfo = new TaskResultInfo(env, taskId, args); + TaskResultInfo* resultInfo = new TaskResultInfo(env, taskId1, args); + + NativeEngineTest::ExecuteOnReceiveDataCallback(cbInfo.get(), resultInfo); TaskManager& taskManager = TaskManager::GetInstance(); - taskManager.RegisterCallback(env, taskId, cbInfo, "TaskpoolTest131"); - taskManager.DecreaseSendDataRefCount(env, taskId); + taskManager.RegisterCallback(env, taskId1, cbInfo, "TaskpoolTest131-1"); + taskManager.DecreaseSendDataRefCount(env, taskId1); + + Task* task2 = new Task(); + uint32_t taskId2 = TaskManager::GetInstance().CalculateTaskId(reinterpret_cast(task2)); + task2->taskId_ = taskId2; + + taskManager.RegisterCallback(env, taskId2, nullptr, "TaskpoolTest131-2"); + taskManager.DecreaseSendDataRefCount(env, taskId2); ASSERT_TRUE(true); }