From 412f405081b2378aa495a3a455de9524252004cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E4=BA=AE?= Date: Thu, 10 Nov 2022 15:05:38 +0800 Subject: [PATCH] =?UTF-8?q?IssueNo:=20#I60I21=20Description:=20=E8=B7=A8?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=9E=90=E6=9E=84NativeReference=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=B4=A9=E6=BA=83=20Sig:=20SIG=5FApplicationFramework?= =?UTF-8?q?=20Feature=20or=20Bugfix:=20Bugfix=20Binary=20Source:=20No?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 杨亮 Change-Id: Id8cc9ebb2a25384952c4f7495fe99ba774b94f1d --- .../native/js_service_extension_context.cpp | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/frameworks/native/ability/native/js_service_extension_context.cpp b/frameworks/native/ability/native/js_service_extension_context.cpp index 2034c39582..c9320057c9 100644 --- a/frameworks/native/ability/native/js_service_extension_context.cpp +++ b/frameworks/native/ability/native/js_service_extension_context.cpp @@ -878,7 +878,44 @@ NativeValue* CreateJsServiceExtensionContext(NativeEngine& engine, std::shared_p JSServiceExtensionConnection::JSServiceExtensionConnection(NativeEngine& engine) : engine_(engine) {} -JSServiceExtensionConnection::~JSServiceExtensionConnection() = default; +JSServiceExtensionConnection::~JSServiceExtensionConnection() +{ + if (jsConnectionObject_ == nullptr) { + return; + } + + uv_loop_t *loop = engine_.GetUVLoop(); + if (loop == nullptr) { + return; + } + + uv_work_t *work = new (std::nothrow) uv_work_t; + if (work == nullptr) { + return; + } + work->data = reinterpret_cast(jsConnectionObject_.release()); + int ret = uv_queue_work(loop, work, [](uv_work_t *work) {}, + [](uv_work_t *work, int status) { + if (work == nullptr) { + return; + } + if (work->data == nullptr) { + delete work; + work = nullptr; + return; + } + delete reinterpret_cast(work->data); + work->data = nullptr; + delete work; + work = nullptr; + }); + if (ret != 0) { + delete reinterpret_cast(work->data); + work->data = nullptr; + delete work; + work = nullptr; + } +} void JSServiceExtensionConnection::SetConnectionId(int64_t id) {