From 0bfaf11b0ee044a2ed8c139eaacae171ab162bf4 Mon Sep 17 00:00:00 2001 From: zcdqs Date: Tue, 26 Apr 2022 16:46:12 +0800 Subject: [PATCH] use weak to avoid use nativeEngine after destroy Signed-off-by: zcdqs Change-Id: I0073eaebfdaaa728ad09b2778664ad48df388413 --- .../engine/jsi/jsi_declarative_engine.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp index c216a9cc..8a982c93 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp @@ -758,17 +758,23 @@ void JsiDeclarativeEngine::SetPostTask(NativeEngine* nativeEngine) { LOGI("SetPostTask"); auto weakDelegate = AceType::WeakClaim(AceType::RawPtr(engineInstance_->GetDelegate())); - auto&& postTask = [weakDelegate, nativeEngine = nativeEngine_, id = instanceId_](bool needSync) { + auto&& postTask = [weakDelegate, weakEngine = AceType::WeakClaim(this), id = instanceId_](bool needSync) { auto delegate = weakDelegate.Upgrade(); if (delegate == nullptr) { LOGE("delegate is nullptr"); return; } - delegate->PostJsTask([nativeEngine, needSync, id]() { - ContainerScope scope(id); + delegate->PostJsTask([weakEngine, needSync, id]() { + auto jsEngine = weakEngine.Upgrade(); + if (jsEngine == nullptr) { + LOGW("jsEngine is nullptr"); + return; + } + auto nativeEngine = jsEngine->GetNativeEngine(); if (nativeEngine == nullptr) { return; } + ContainerScope scope(id); nativeEngine->Loop(LOOP_NOWAIT, needSync); }); };