From aada88cacd5dc26561b4ff11585b9fc2020ff0c0 Mon Sep 17 00:00:00 2001 From: liuyics15 <1179805842@qq.com> Date: Fri, 14 Feb 2025 17:16:05 +0800 Subject: [PATCH] fix cj namespace leak Signed-off-by: liuyics15 <1179805842@qq.com> Change-Id: I8efab8713ad155b8704e216db74bb438a054dc90 --- .../cj_environment/src/cj_environment.cpp | 20 ++++++++++++++++--- .../interfaces/inner_api/cj_environment.h | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/cj_environment/frameworks/cj_environment/src/cj_environment.cpp b/cj_environment/frameworks/cj_environment/src/cj_environment.cpp index b41c53732c..47a57ce206 100644 --- a/cj_environment/frameworks/cj_environment/src/cj_environment.cpp +++ b/cj_environment/frameworks/cj_environment/src/cj_environment.cpp @@ -229,9 +229,18 @@ void CJEnvironment::InitSpawnEnv() void CJEnvironment::PreloadLibs() { LOGI("start Preloadlibs"); - LoadCJLibrary(SDK, "libohos.ability.so"); - LoadCJLibrary(SDK, "libohos.component.so"); - LoadCJLibrary(SDK, "libohos.window.so"); + auto lib = LoadCJLibrary(SDK, "libohos.ability.so"); + if (lib) { + preloadLibs_.emplace_back(lib); + } + lib = LoadCJLibrary(SDK, "libohos.component.so"); + if (lib) { + preloadLibs_.emplace_back(lib); + } + lib = LoadCJLibrary(SDK, "libohos.window.so"); + if (lib) { + preloadLibs_.emplace_back(lib); + } } void CJEnvironment::SetAppPath(const std::string& appPath) @@ -266,6 +275,10 @@ CJEnvironment::~CJEnvironment() StopRuntime(); delete lazyApis_; + + for (auto lib : preloadLibs_) { + dlclose(lib); + } } CJEnvironment* CJEnvironment::GetInstance() @@ -298,6 +311,7 @@ bool CJEnvironment::LoadRuntimeApis() return false; } #undef RTLIB_NAME + preloadLibs_.emplace_back(dso); if (!LoadSymbolInitCJRuntime(dso, *lazyApis_) || !LoadSymbolInitUIScheduler(dso, *lazyApis_) || !LoadSymbolRunUIScheduler(dso, *lazyApis_) || diff --git a/cj_environment/interfaces/inner_api/cj_environment.h b/cj_environment/interfaces/inner_api/cj_environment.h index 2595e97343..ec94160237 100644 --- a/cj_environment/interfaces/inner_api/cj_environment.h +++ b/cj_environment/interfaces/inner_api/cj_environment.h @@ -123,6 +123,7 @@ private: void* uiScheduler_ {nullptr}; SanitizerKind sanitizerKind_ {SanitizerKind::NONE}; NSMode nsMode_; + std::vector preloadLibs_; }; }