From 062204102d421d7a5263dc2466d1392028c8e17a Mon Sep 17 00:00:00 2001 From: wangpggg Date: Wed, 20 Nov 2024 16:46:24 +0800 Subject: [PATCH] modify weak_ptr Signed-off-by: wangpeng --- .../native/backup_ext/src/ext_backup_js.cpp | 26 ++++--------------- .../backup_ext/ext_backup_js_test.cpp | 4 +-- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/frameworks/native/backup_ext/src/ext_backup_js.cpp b/frameworks/native/backup_ext/src/ext_backup_js.cpp index 103bd8b0b..c0c105836 100644 --- a/frameworks/native/backup_ext/src/ext_backup_js.cpp +++ b/frameworks/native/backup_ext/src/ext_backup_js.cpp @@ -412,12 +412,12 @@ napi_value AttachBackupExtensionContext(napi_env env, void *value, void *) HILOG_WARN("invalid parameter."); return nullptr; } - auto ptr = reinterpret_cast *>(value)->lock(); + auto ptr = reinterpret_cast(value); if (ptr == nullptr) { HILOGE("invalid context."); return nullptr; } - auto object = CreateExtBackupJsContext(env, ptr); + auto object = CreateExtBackupJsContext(env, std::static_pointer_cast(ptr->shared_from_this())); if (object == nullptr) { HILOGE("Failed to get js backup extension context"); return nullptr; @@ -432,22 +432,14 @@ napi_value AttachBackupExtensionContext(napi_env env, void *value, void *) napi_coerce_to_native_binding_object(env, contextObj, AbilityRuntime::DetachCallbackFunc, AttachBackupExtensionContext, value, nullptr); - auto workContext = new (std::nothrow) std::weak_ptr(ptr); - if (workContext == nullptr) { - HILOGE("Failed to get backup extension context"); - return nullptr; - } napi_status status = napi_wrap( - env, contextObj, workContext, + env, contextObj, value, [](napi_env, void *data, void *) { HILOG_DEBUG("Finalizer for weak_ptr base context is called"); - delete static_cast *>(data); }, nullptr, nullptr); if (status != napi_ok) { HILOG_DEBUG("Failed to wrap js instance"); - delete workContext; - workContext = nullptr; } return contextObj; } @@ -498,25 +490,17 @@ void ExtBackupJs::ExportJsContext(void) context->Bind(jsRuntime_, contextRef.release()); napi_set_named_property(env, obj, "context", contextObj); - auto workContext = new (std::nothrow) std::weak_ptr(context); - if (workContext == nullptr) { - HILOGE("Failed to create ExtBackupContext."); - return; - } napi_coerce_to_native_binding_object(env, contextObj, AbilityRuntime::DetachCallbackFunc, - AttachBackupExtensionContext, workContext, nullptr); + AttachBackupExtensionContext, context.get(), nullptr); HILOGI("Set backup extension ability context pointer is nullptr: %{public}d", context.get() == nullptr); napi_status status = napi_wrap( - env, contextObj, workContext, + env, contextObj, context.get(), [](napi_env, void *data, void *) { HILOG_DEBUG("Finalizer for weak_ptr base context is called"); - delete static_cast *>(data); }, nullptr, nullptr); if (status != napi_ok) { HILOG_DEBUG("Failed to wrap js instance"); - delete workContext; - workContext = nullptr; } } diff --git a/tests/unittests/backup_ext/ext_backup_js_test.cpp b/tests/unittests/backup_ext/ext_backup_js_test.cpp index bd0a545d4..6ee6c23d6 100644 --- a/tests/unittests/backup_ext/ext_backup_js_test.cpp +++ b/tests/unittests/backup_ext/ext_backup_js_test.cpp @@ -752,13 +752,13 @@ HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_AttachBackupExtensionContext_0100, t auto value = make_shared(); EXPECT_CALL(*extBackupMock, CreateExtBackupJsContext(_, _)).WillOnce(Return(nullptr)); - ret = AttachBackupExtensionContext(reinterpret_cast(&env), reinterpret_cast(&value), nullptr); + ret = AttachBackupExtensionContext(reinterpret_cast(&env), value.get(), nullptr); EXPECT_TRUE(ret == nullptr); EXPECT_CALL(*extBackupMock, CreateExtBackupJsContext(_, _)) .WillOnce(Return(reinterpret_cast(&env))); EXPECT_CALL(*extBackupMock, LoadSystemModuleByEngine(_, _, _, _)).WillOnce(Return(nullptr)); - ret = AttachBackupExtensionContext(reinterpret_cast(&env), reinterpret_cast(&value), nullptr); + ret = AttachBackupExtensionContext(reinterpret_cast(&env), value.get(), nullptr); EXPECT_TRUE(ret == nullptr); } catch (...) { EXPECT_TRUE(false); -- Gitee