From 749b47fcae02f51ccd96a50901a8cb88e8055fce Mon Sep 17 00:00:00 2001 From: chuxing Date: Wed, 28 Oct 2020 11:50:40 +0800 Subject: [PATCH] fixing builder coredump --- inc/register/ops_kernel_builder_registry.h | 2 ++ register/ops_kernel_builder_registry.cc | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/inc/register/ops_kernel_builder_registry.h b/inc/register/ops_kernel_builder_registry.h index 3c8e047044..8555cf9ef7 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 ce0f2de8c4..c48a76e96b 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(builder); + } +} 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 -- Gitee