diff --git a/inc/register/ops_kernel_builder_registry.h b/inc/register/ops_kernel_builder_registry.h index 3c8e047044341eed57a8d58f2cc36765218a2570..8a8f3a189fa3a998a34e385b6aa7bd373e305a2f 100644 --- a/inc/register/ops_kernel_builder_registry.h +++ b/inc/register/ops_kernel_builder_registry.h @@ -26,6 +26,7 @@ using OpsKernelBuilderPtr = std::shared_ptr; class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY OpsKernelBuilderRegistry { public: + ~OpsKernelBuilderRegistry(); static OpsKernelBuilderRegistry &GetInstance(); void Register(const std::string &lib_name, const OpsKernelBuilderPtr &instance); @@ -37,6 +38,7 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY OpsKernelBuilderRegistry const std::map &GetAll() const; private: + OpsKernelBuilderRegistry() = default; std::map kernel_builders_; }; diff --git a/register/ops_kernel_builder_registry.cc b/register/ops_kernel_builder_registry.cc index ce0f2de8c409448e1e1d4e2d56f61e0e515d38da..ef55590dd5113b18a4510309177413be34fb6c48 100644 --- a/register/ops_kernel_builder_registry.cc +++ b/register/ops_kernel_builder_registry.cc @@ -18,6 +18,14 @@ #include "graph/debug/ge_log.h" namespace ge { +OpsKernelBuilderRegistry::~OpsKernelBuilderRegistry() { + for (auto &it : kernel_builders_) { + GELOGW("%s was not unregistered", it.first.c_str()); + // to avoid coredump when unregister is not called when so was close + // this is called only when app is shutting down, so no release would be leaked + new (std::nothrow) std::shared_ptr(it.second); + } +} void OpsKernelBuilderRegistry::Register(const string &lib_name, const OpsKernelBuilderPtr &instance) { auto it = kernel_builders_.emplace(lib_name, instance); if (it.second) { @@ -67,4 +75,4 @@ OpsKernelBuilderRegistrar::~OpsKernelBuilderRegistrar() { GELOGI("OpsKernelBuilderRegistrar destroyed. KernelLibName = %s", kernel_lib_name_.c_str()); OpsKernelBuilderRegistry::GetInstance().Unregister(kernel_lib_name_); } -} // namespace ge \ No newline at end of file +} // namespace ge