diff --git a/js_concurrent_module/taskpool/task.cpp b/js_concurrent_module/taskpool/task.cpp index e45cb144c0678424d6011bf5830f4b69742146d8..7229876eb4ed359eb47e36b87bdeb09ec7e616a5 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 5c7fed826fe3f6463ba07a3ba1783efccca3b020..99dd4aeaa8ec5034daf35749c180751b11383917 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) {