From e7d6d1ce41d9cd4b09f0e0e18c247c3a5532bdaa Mon Sep 17 00:00:00 2001 From: zhuruigan Date: Wed, 10 Sep 2025 11:01:45 +0800 Subject: [PATCH] modify deserialize Signed-off-by: zhuruigan Change-Id: I55af6884e537522dd0d4402a1a964b63f0a94285 --- js_concurrent_module/taskpool/task.cpp | 23 +++++++++++++--------- js_concurrent_module/taskpool/taskpool.cpp | 4 ++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/js_concurrent_module/taskpool/task.cpp b/js_concurrent_module/taskpool/task.cpp index e45cb144..7229876e 100644 --- a/js_concurrent_module/taskpool/task.cpp +++ b/js_concurrent_module/taskpool/task.cpp @@ -1124,17 +1124,22 @@ bool Task::UpdateTask(uint64_t startTime, void* worker) napi_value Task::DeserializeValue(napi_env env, napi_value* func, napi_value* args) { - std::lock_guard lock(taskMutex_); - if (UNLIKELY(currentTaskInfo_ == nullptr)) { - HILOG_ERROR("taskpool:: the currentTaskInfo is nullptr, the task may have been cancelled"); - return nullptr; + void* serializationFunction = nullptr; + void* serializationArguments = nullptr; + { + std::lock_guard lock(taskMutex_); + if (UNLIKELY(currentTaskInfo_ == nullptr)) { + HILOG_ERROR("taskpool:: the currentTaskInfo is nullptr, the task may have been cancelled"); + return nullptr; + } + serializationFunction = currentTaskInfo_->serializationFunction; + serializationArguments = currentTaskInfo_->serializationArguments; } - napi_status status = napi_ok; std::string errMessage = ""; - status = napi_deserialize(env, currentTaskInfo_->serializationFunction, func); + status = napi_deserialize(env, serializationFunction, func); if (!IsGroupFunctionTask()) { - napi_delete_serialization_data(env, currentTaskInfo_->serializationFunction); + napi_delete_serialization_data(env, serializationFunction); } if (status != napi_ok || func == nullptr) { errMessage = "taskpool:: failed to deserialize function."; @@ -1144,9 +1149,9 @@ napi_value Task::DeserializeValue(napi_env env, napi_value* func, napi_value* ar return err; } - status = napi_deserialize(env, currentTaskInfo_->serializationArguments, args); + status = napi_deserialize(env, serializationArguments, args); if (!IsGroupFunctionTask()) { - napi_delete_serialization_data(env, currentTaskInfo_->serializationArguments); + napi_delete_serialization_data(env, serializationArguments); } if (status != napi_ok || args == nullptr) { errMessage = "taskpool:: failed to deserialize function."; diff --git a/js_concurrent_module/taskpool/taskpool.cpp b/js_concurrent_module/taskpool/taskpool.cpp index 5c7fed82..99dd4aea 100644 --- a/js_concurrent_module/taskpool/taskpool.cpp +++ b/js_concurrent_module/taskpool/taskpool.cpp @@ -383,6 +383,10 @@ napi_value TaskPool::ExecuteGroup(napi_env env, napi_value napiTaskGroup, Priori uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId); HILOG_INFO("taskpool::ExecuteGroup groupId %{public}s", std::to_string(groupId).c_str()); auto taskGroup = TaskGroupManager::GetInstance().GetTaskGroup(groupId); + if (taskGroup == nullptr) { + ErrorHelper::ThrowError(env, ErrorHelper::TYPE_ERROR, "taskGroup is nullptr."); + return nullptr; + } napi_reference_ref(env, taskGroup->groupRef_, nullptr); if (taskGroup->groupState_ == ExecuteState::NOT_FOUND || taskGroup->groupState_ == ExecuteState::FINISHED || taskGroup->groupState_ == ExecuteState::CANCELED) { -- Gitee