diff --git a/frameworks/native/neural_network_core/backend_manager.cpp b/frameworks/native/neural_network_core/backend_manager.cpp index b1c6f11760aa2bf15aa32b9406401493ca13d8cb..8417916b9e69eb3892be3abf4a776dbb115fe722 100644 --- a/frameworks/native/neural_network_core/backend_manager.cpp +++ b/frameworks/native/neural_network_core/backend_manager.cpp @@ -20,12 +20,18 @@ namespace OHOS { namespace NeuralNetworkRuntime { +void* BackendManager::m_libHandle = nullptr; + BackendManager::~BackendManager() { m_backends.clear(); m_backendNames.clear(); m_backendIDs.clear(); m_backendIDGroup.clear(); + if (m_libHandle != nullptr) { + (void)dlclose(m_libHandle); + m_libHandle = nullptr; + } } BackendManager& BackendManager::GetInstance() @@ -34,8 +40,8 @@ BackendManager& BackendManager::GetInstance() if (dlopen("libneural_network_runtime.so", RTLD_NOLOAD) != nullptr) { // if libneural_network_runtime_ext.so not loaded, try to dlopen it if (dlopen("libneural_network_runtime_ext.so", RTLD_NOLOAD) == nullptr) { - void* libHandle = dlopen("libneural_network_runtime_ext.so", RTLD_NOW | RTLD_GLOBAL); - if (libHandle == nullptr) { + m_libHandle = dlopen("libneural_network_runtime_ext.so", RTLD_NOW | RTLD_GLOBAL); + if (m_libHandle == nullptr) { LOGW("Failed to dlopen libneural_network_runtime_ext.so."); } } diff --git a/frameworks/native/neural_network_core/backend_manager.h b/frameworks/native/neural_network_core/backend_manager.h index 506f0c29dcbfdf99f4f10358ed2668f849336ddc..02f89a3d44b168268d0444519132b8fdeadcb0a2 100644 --- a/frameworks/native/neural_network_core/backend_manager.h +++ b/frameworks/native/neural_network_core/backend_manager.h @@ -58,6 +58,7 @@ private: std::unordered_map> m_backends; std::mutex m_mtx; std::unordered_map> m_backendIDGroup; + static void* m_libHandle; }; } // namespace NeuralNetworkRuntime } // namespace OHOS