diff --git a/frameworks/jskitsimpl/include/adaptor/js_object_wrapper.h b/frameworks/jskitsimpl/include/adaptor/js_object_wrapper.h index b4fe157..626be1d 100644 --- a/frameworks/jskitsimpl/include/adaptor/js_object_wrapper.h +++ b/frameworks/jskitsimpl/include/adaptor/js_object_wrapper.h @@ -33,6 +33,7 @@ public: bool isUndefined(char *value); void AddUndefined(char *value); void DeleteUndefined(char *value); + void DestroyObject(); private: DistributedObjectStore *objectStore_; diff --git a/frameworks/jskitsimpl/src/adaptor/js_distributedobject.cpp b/frameworks/jskitsimpl/src/adaptor/js_distributedobject.cpp index 6deade5..5a404ed 100644 --- a/frameworks/jskitsimpl/src/adaptor/js_distributedobject.cpp +++ b/frameworks/jskitsimpl/src/adaptor/js_distributedobject.cpp @@ -55,6 +55,7 @@ napi_value JSDistributedObject::JSGet(napi_env env, napi_callback_info info) status = napi_unwrap(env, thisVar, (void **)&wrapper); CHECK_EQUAL_WITH_RETURN_NULL(status, napi_ok); ASSERT_MATCH_ELSE_RETURN_NULL(wrapper != nullptr); + ASSERT_MATCH_ELSE_RETURN_NULL(wrapper->GetObject() != nullptr); napi_value result = nullptr; if (wrapper->isUndefined(key)) { napi_get_undefined(env, &result); @@ -88,6 +89,7 @@ napi_value JSDistributedObject::JSPut(napi_env env, napi_callback_info info) status = napi_unwrap(env, thisVar, (void **)&wrapper); CHECK_EQUAL_WITH_RETURN_NULL(status, napi_ok); ASSERT_MATCH_ELSE_RETURN_NULL(wrapper != nullptr); + ASSERT_MATCH_ELSE_RETURN_NULL(wrapper->GetObject() != nullptr); if (valueType == napi_undefined) { wrapper->AddUndefined(key); return nullptr; @@ -236,6 +238,7 @@ napi_value JSDistributedObject::JSSave(napi_env env, napi_callback_info info) napi_status status = napi_unwrap(env, ctxt->self, (void **)&wrapper); CHECK_EQUAL_WITH_RETURN_VOID(status, napi_ok); ASSERT_MATCH_ELSE_RETURN_VOID(wrapper != nullptr); + ASSERT_MATCH_ELSE_RETURN_VOID(wrapper->GetObject() != nullptr); ctxt->object = wrapper->GetObject(); }; ctxt->GetCbInfo(env, info, getCbOpe); @@ -243,8 +246,7 @@ napi_value JSDistributedObject::JSSave(napi_env env, napi_callback_info info) if (ctxt->status == napi_ok) { ctxt->status = napi_new_instance(env, JSDistributedObject::GetSaveResultCons(env, ctxt->object->GetSessionId(), - ctxt->version, ctxt->deviceId), - 0, nullptr, &result); + ctxt->version, ctxt->deviceId), 0, nullptr, &result); CHECK_STATUS_RETURN_VOID(ctxt, "output failed!"); } }; @@ -285,6 +287,7 @@ napi_value JSDistributedObject::JSRevokeSave(napi_env env, napi_callback_info in napi_status status = napi_unwrap(env, ctxt->self, (void **)&wrapper); CHECK_EQUAL_WITH_RETURN_VOID(status, napi_ok); ASSERT_MATCH_ELSE_RETURN_VOID(wrapper != nullptr); + ASSERT_MATCH_ELSE_RETURN_VOID(wrapper->GetObject() != nullptr); ctxt->object = wrapper->GetObject(); }; ctxt->GetCbInfo(env, info, getCbOpe); diff --git a/frameworks/jskitsimpl/src/adaptor/js_distributedobjectstore.cpp b/frameworks/jskitsimpl/src/adaptor/js_distributedobjectstore.cpp index 2739f97..ea5063e 100644 --- a/frameworks/jskitsimpl/src/adaptor/js_distributedobjectstore.cpp +++ b/frameworks/jskitsimpl/src/adaptor/js_distributedobjectstore.cpp @@ -97,13 +97,19 @@ napi_value JSDistributedObjectStore::NewDistributedObject( status = napi_wrap( env, result, objectWrapper, [](napi_env env, void *data, void *hint) { - LOG_INFO("start delete object"); + if (data == nullptr) { + LOG_WARN("objectWrapper is nullptr."); + return; + } auto objectWrapper = (JSObjectWrapper *)data; + if (objectWrapper->GetObject() == nullptr) { + delete objectWrapper; + return; + } + LOG_INFO("start delete object"); DistributedObjectStore::GetInstance(JSDistributedObjectStore::GetBundleName(env)) ->DeleteObject(objectWrapper->GetObject()->GetSessionId()); - if (objectWrapper != nullptr) { - delete objectWrapper; - } + delete objectWrapper; }, nullptr, nullptr); RestoreWatchers(env, objectWrapper, objectId); @@ -172,10 +178,9 @@ napi_value JSDistributedObjectStore::JSDestroyObjectSync(napi_env env, napi_call ASSERT_MATCH_ELSE_RETURN_NULL(objectInfo != nullptr && objectWrapper->GetObject() != nullptr); objectWrapper->DeleteWatch(env, CHANGE); objectWrapper->DeleteWatch(env, STATUS); - uint32_t ret = objectInfo->DeleteObject(objectWrapper->GetObject()->GetSessionId()); - napi_value result = nullptr; - napi_create_int32(env, ret, &result); - return result; + objectInfo->DeleteObject(objectWrapper->GetObject()->GetSessionId()); + objectWrapper->DestroyObject(); + return nullptr; } // function on(type: 'change', object: DistributedObject, callback: Callback): void; diff --git a/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp b/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp index 64c938d..ef950ea 100644 --- a/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp +++ b/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp @@ -87,4 +87,9 @@ void JSObjectWrapper::DeleteUndefined(char *value) undefinedProperties.erase(it); } } + +void JSObjectWrapper::DestroyObject() +{ + object_ = nullptr; +} } // namespace OHOS::ObjectStore \ No newline at end of file