diff --git a/driver/js/include/driver/napi/jsh/jsh_ctx.h b/driver/js/include/driver/napi/jsh/jsh_ctx.h index 1805c862e7e..e09bf52abb8 100644 --- a/driver/js/include/driver/napi/jsh/jsh_ctx.h +++ b/driver/js/include/driver/napi/jsh/jsh_ctx.h @@ -61,7 +61,7 @@ constexpr static int kJSHWeakCallbackWrapperInvalidIndex = 2; constexpr static int KJSHTurboFunctionGetIndex = 3; constexpr static int kJSHExternalDataNum = 4; -extern void* GetPointerInInstanceData(JSVM_Env env, int index); +extern void* GetPointerInInstanceData(JSVM_Env env, int index, bool *error = nullptr); class JSHCtx : public Ctx { public: diff --git a/driver/js/src/napi/jsh/jsh_ctx.cc b/driver/js/src/napi/jsh/jsh_ctx.cc index da3a37e50ff..4a8f3d0f731 100644 --- a/driver/js/src/napi/jsh/jsh_ctx.cc +++ b/driver/js/src/napi/jsh/jsh_ctx.cc @@ -44,7 +44,7 @@ using StringViewUtils = footstone::StringViewUtils; using JSHVM = hippy::vm::JSHVM; using CallbackInfo = hippy::CallbackInfo; -void* GetPointerInInstanceData(JSVM_Env env, int index) { +void* GetPointerInInstanceData(JSVM_Env env, int index, bool *error) { if (index < 0 || index >= kJSHExternalDataNum) { return nullptr; } @@ -53,7 +53,11 @@ void* GetPointerInInstanceData(JSVM_Env env, int index) { auto status = OH_JSVM_GetInstanceData(env, &data); FOOTSTONE_DCHECK(status == JSVM_OK); - if (data) { + if (error) { + *error = (status == JSVM_OK) ? false : true; + } + + if ((status == JSVM_OK) && data) { return ((void**)data)[index]; } return nullptr; @@ -1470,8 +1474,9 @@ void JSH_Finalize(JSVM_Env env, void* finalizeData, void* finalizeHint) { if (!finalizeData) { return; } - void* invalid = GetPointerInInstanceData(env, kJSHWeakCallbackWrapperInvalidIndex); - if (invalid) { + bool error = false; + void* invalid = GetPointerInInstanceData(env, kJSHWeakCallbackWrapperInvalidIndex, &error); + if (invalid || error) { return; } auto wrapper = reinterpret_cast(finalizeData);