From e796cc7b3511148197f099b6d1e9e53dedd5cbdf Mon Sep 17 00:00:00 2001 From: zhuruigan Date: Fri, 16 May 2025 10:08:40 +0800 Subject: [PATCH] add serialize error message Signed-off-by: zhuruigan Change-Id: I31c9c13457c9a28f62ed42aab7b37fc6760bf5f9 --- js_concurrent_module/taskpool/task.cpp | 21 +++++++++++--------- js_concurrent_module/worker/worker.cpp | 27 ++++++++++++++++++-------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/js_concurrent_module/taskpool/task.cpp b/js_concurrent_module/taskpool/task.cpp index d0e3b011..0278280c 100644 --- a/js_concurrent_module/taskpool/task.cpp +++ b/js_concurrent_module/taskpool/task.cpp @@ -498,10 +498,11 @@ napi_value Task::SendData(napi_env env, napi_callback_info cbinfo) void* serializationArgs = nullptr; bool defaultClone = false; bool defaultTransfer = true; - napi_status status = napi_serialize_inner(env, argsArray, undefined, undefined, - defaultTransfer, defaultClone, &serializationArgs); + std::string errString = ""; + napi_status status = napi_serialize_inner_with_error(env, argsArray, undefined, undefined, defaultTransfer, + defaultClone, &serializationArgs, errString); if (status != napi_ok || serializationArgs == nullptr) { - std::string errMessage = "taskpool:: failed to serialize function"; + std::string errMessage = "taskpool:: failed to serialize function.\r\nSerialize error: " + errString; HILOG_ERROR("%{public}s in SendData", errMessage.c_str()); ErrorHelper::ThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, errMessage.c_str()); return nullptr; @@ -1070,20 +1071,22 @@ TaskInfo* Task::GenerateTaskInfo(napi_env env, napi_value func, napi_value args, HILOG_DEBUG("taskpool:: task GenerateTaskInfo"); napi_value undefined = NapiHelper::GetUndefinedValue(env); void* serializationFunction = nullptr; - napi_status status = napi_serialize_inner(env, func, undefined, undefined, - defaultTransfer, defaultCloneSendable, &serializationFunction); + std::string errString = ""; + napi_status status = napi_serialize_inner_with_error(env, func, undefined, undefined, defaultTransfer, + defaultCloneSendable, &serializationFunction, errString); std::string errMessage = ""; if (status != napi_ok || serializationFunction == nullptr) { - errMessage = "taskpool: failed to serialize function."; + errMessage = "taskpool: failed to serialize function.\r\nSerialize error: " + errString; HILOG_ERROR("%{public}s", errMessage.c_str()); ErrorHelper::ThrowError(env, ErrorHelper::ERR_NOT_CONCURRENT_FUNCTION, errMessage.c_str()); return nullptr; } void* serializationArguments = nullptr; - status = napi_serialize_inner(env, args, transferList, cloneList, - defaultTransfer, defaultCloneSendable, &serializationArguments); + errMessage = ""; + status = napi_serialize_inner_with_error(env, args, transferList, cloneList, defaultTransfer, + defaultCloneSendable, &serializationArguments, errString); if (status != napi_ok || serializationArguments == nullptr) { - errMessage = "taskpool: failed to serialize arguments."; + errMessage = "taskpool: failed to serialize arguments.\r\nSerialize error: " + errString; HILOG_ERROR("%{public}s", errMessage.c_str()); ErrorHelper::ThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, errMessage.c_str()); return nullptr; diff --git a/js_concurrent_module/worker/worker.cpp b/js_concurrent_module/worker/worker.cpp index 5a70a71a..b88081f5 100644 --- a/js_concurrent_module/worker/worker.cpp +++ b/js_concurrent_module/worker/worker.cpp @@ -588,6 +588,7 @@ napi_value Worker::CommonPostMessage(napi_env env, napi_callback_info cbinfo, bo napi_value undefined = NapiHelper::GetUndefinedValue(env); napi_value transferList = undefined; std::string errMessage = "the type of the transfer list must be an array."; + std::string serializeErr = ""; if (argc >= NUM_WORKER_ARGS) { bool isValidTransfer = false; napi_value secondArg = argv[1]; @@ -595,13 +596,16 @@ napi_value Worker::CommonPostMessage(napi_env env, napi_callback_info cbinfo, bo if (transferList == nullptr || !isValidTransfer) { return nullptr; } - serializeStatus = napi_serialize_inner(env, argv[0], transferList, undefined, false, defaultClone, &data); + serializeStatus = napi_serialize_inner_with_error(env, argv[0], transferList, undefined, false, defaultClone, + &data, serializeErr); } else { - serializeStatus = napi_serialize_inner(env, argv[0], undefined, undefined, false, defaultClone, &data); + serializeStatus = napi_serialize_inner_with_error(env, argv[0], undefined, undefined, false, defaultClone, + &data, serializeErr); } if (serializeStatus != napi_ok || data == nullptr) { worker->HostOnMessageErrorInner(); - WorkerThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, "failed to serialize message."); + serializeErr = "failed to serialize message.\r\nSerialize error: " + serializeErr; + WorkerThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, serializeErr.c_str()); return nullptr; } worker->PostMessageInner(data); @@ -966,6 +970,7 @@ napi_value Worker::CommonPostMessageToHost(napi_env env, napi_callback_info cbin napi_value undefined = NapiHelper::GetUndefinedValue(env); napi_value transferList = undefined; std::string errMessage = "Transfer list must be an Array"; + std::string serializeErr = ""; if (argc >= NUM_WORKER_ARGS) { bool isValidTransfer = false; napi_value secondArg = argv[1]; @@ -973,14 +978,17 @@ napi_value Worker::CommonPostMessageToHost(napi_env env, napi_callback_info cbin if (transferList == nullptr || !isValidTransfer) { return nullptr; } - serializeStatus = napi_serialize_inner(env, argv[0], transferList, undefined, false, defaultClone, &data); + serializeStatus = napi_serialize_inner_with_error(env, argv[0], transferList, undefined, false, defaultClone, + &data, serializeErr); } else { - serializeStatus = napi_serialize_inner(env, argv[0], undefined, undefined, false, defaultClone, &data); + serializeStatus = napi_serialize_inner_with_error(env, argv[0], undefined, undefined, false, defaultClone, + &data, serializeErr); } if (serializeStatus != napi_ok || data == nullptr) { worker->WorkerOnMessageErrorInner(); - WorkerThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, "failed to serialize message."); + serializeErr = "failed to serialize message.\r\nSerialize error: " + serializeErr; + WorkerThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, serializeErr.c_str()); return nullptr; } worker->PostMessageToHostInner(data); @@ -1048,9 +1056,12 @@ napi_value Worker::GlobalCall(napi_env env, napi_callback_info cbinfo) // meaningless to copy sendable object when call globalObject bool defaultClone = true; bool defaultTransfer = false; - serializeStatus = napi_serialize_inner(env, argsArray, undefined, undefined, defaultTransfer, defaultClone, &data); + std::string serializeErr = ""; + serializeStatus = napi_serialize_inner_with_error(env, argsArray, undefined, undefined, defaultTransfer, + defaultClone, &data, serializeErr); if (serializeStatus != napi_ok || data == nullptr) { - ErrorHelper::ThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, "failed to serialize message."); + serializeErr = "failed to serialize message.\r\nSerialize error: " + serializeErr; + ErrorHelper::ThrowError(env, ErrorHelper::ERR_WORKER_SERIALIZATION, serializeErr.c_str()); return nullptr; } worker->hostGlobalCallQueue_.Push(worker->globalCallId_, data); -- Gitee