From 30740d2c3e30d55b993b95f26cfb9644ce8ab2e9 Mon Sep 17 00:00:00 2001 From: qinghuawen <1427556481@qq.com> Date: Sat, 26 Jul 2025 10:58:17 +0800 Subject: [PATCH] =?UTF-8?q?settings=E5=AE=89=E5=85=A8=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qinghuawen <1427556481@qq.com> --- ani/settings/ani_settings.cpp | 7 ++++++- ani/settings/ani_settings_observer.cpp | 22 +++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ani/settings/ani_settings.cpp b/ani/settings/ani_settings.cpp index e518624d..c372cecc 100644 --- a/ani/settings/ani_settings.cpp +++ b/ani/settings/ani_settings.cpp @@ -207,6 +207,8 @@ ani_string ani_get_value_ext(ani_env *env, ani_object context, ani_string name, asyncCallbackInfo->tableName = unwrap_string_from_js(env, domainName); if (IsTableNameInvalid(asyncCallbackInfo->tableName)) { SETTING_LOG_ERROR("INVALID tableName [ARGS_THREE]"); + delete asyncCallbackInfo; + asyncCallbackInfo = nullptr; return nullptr; } GetValueExecuteExt(env, (void *)asyncCallbackInfo); @@ -250,6 +252,8 @@ ani_boolean ani_set_value_ext( asyncCallbackInfo->value = unwrap_string_from_js(env, value); if (IsTableNameInvalid(asyncCallbackInfo->tableName)) { SETTING_LOG_ERROR("INVALID tableName [ARGS_FOUR]"); + delete asyncCallbackInfo; + asyncCallbackInfo = nullptr; return false; } SetValueExecuteExt(env, (void *)asyncCallbackInfo, asyncCallbackInfo->uri); @@ -479,8 +483,9 @@ ani_boolean ani_set_value_sync_ext( asyncCallbackInfo->dataShareHelper = getDataShareHelper(env, context, asyncCallbackInfo->tableName, asyncCallbackInfo); SetValueExecuteExt(env, (void *)asyncCallbackInfo, unwrap_string_from_js(env, value)); + bool result = ThrowError(env, asyncCallbackInfo->status); DeleteCallbackInfo(asyncCallbackInfo); - return ThrowError(env, asyncCallbackInfo->status); + return static_cast(result); } void SetValueExecuteExt(ani_env *env, void *data, const std::string setValue) diff --git a/ani/settings/ani_settings_observer.cpp b/ani/settings/ani_settings_observer.cpp index 1eb24838..0c791f34 100644 --- a/ani/settings/ani_settings_observer.cpp +++ b/ani/settings/ani_settings_observer.cpp @@ -223,6 +223,14 @@ std::string GetObserverIdStr() return tmpIdStr; } +void DeleteAsyncCallbackInfo(AsyncCallbackInfo *asyncCallbackInfo) +{ + if (asyncCallbackInfo != nullptr) { + delete asyncCallbackInfo; + asyncCallbackInfo = nullptr; + } +} + ani_boolean ani_settings_register_observer( ani_env *env, ani_object context, ani_string name, ani_string domainName, ani_object observer) { @@ -244,6 +252,7 @@ ani_boolean ani_settings_register_observer( ani_vm *vm = nullptr; if (env->GetVM(&vm) != ANI_OK) { SETTING_LOG_ERROR("GetVM failed"); + DeleteAsyncCallbackInfo(callbackInfo); return false; } callbackInfo->key = unwrap_string_from_js(env, name); @@ -254,14 +263,14 @@ ani_boolean ani_settings_register_observer( if (g_observerMap.find(callbackInfo->key) != g_observerMap.end() && g_observerMap[callbackInfo->key] != nullptr) { SETTING_LOG_INFO("%{public}s, already registered.", __func__); env->GlobalReference_Delete(callbackInfo->callbackRef); - delete callbackInfo; + DeleteAsyncCallbackInfo(callbackInfo); return false; } auto dataShareHelper = getDataShareHelper(env, context, callbackInfo->tableName); if (dataShareHelper == nullptr) { env->GlobalReference_Delete(callbackInfo->callbackRef); - delete callbackInfo; + DeleteAsyncCallbackInfo(callbackInfo); return false; } @@ -269,15 +278,14 @@ ani_boolean ani_settings_register_observer( OHOS::Uri uri(strUri); sptr settingsObserver = sptr(new (std::nothrow) SettingsObserver(vm, observer, callbackInfo)); - env->GlobalReference_Create(observer, &(settingsObserver->callback_)); + if (settingsObserver->callback_ != nullptr) { + env->GlobalReference_Create(observer, &(settingsObserver->callback_)); + } g_observerMap[callbackInfo->key] = settingsObserver; dataShareHelper->RegisterObserver(uri, settingsObserver); dataShareHelper->Release(); - if (callbackInfo != nullptr) { - delete callbackInfo; - callbackInfo = nullptr; - } + DeleteAsyncCallbackInfo(callbackInfo); return true; } -- Gitee