提交 3fc89750 编写于 作者: M mindspore-ci-bot 提交者: Gitee

!4829 fix op_parameter free

Merge pull request !4829 from hangq/master
...@@ -108,6 +108,7 @@ kernel::LiteKernel *KernelRegistry::GetKernel(const std::vector<tensor::Tensor * ...@@ -108,6 +108,7 @@ kernel::LiteKernel *KernelRegistry::GetKernel(const std::vector<tensor::Tensor *
<< schema::EnumNamePrimitiveType((schema::PrimitiveType)primitive->Type()); << schema::EnumNamePrimitiveType((schema::PrimitiveType)primitive->Type());
return nullptr; return nullptr;
} }
this->op_parameters_.emplace_back(parameter);
auto creator = GetCreator(key); auto creator = GetCreator(key);
if (creator != nullptr) { if (creator != nullptr) {
auto kernel = creator(in_tensors, out_tensors, parameter, ctx, key, primitive); auto kernel = creator(in_tensors, out_tensors, parameter, ctx, key, primitive);
...@@ -115,4 +116,11 @@ kernel::LiteKernel *KernelRegistry::GetKernel(const std::vector<tensor::Tensor * ...@@ -115,4 +116,11 @@ kernel::LiteKernel *KernelRegistry::GetKernel(const std::vector<tensor::Tensor *
} }
return nullptr; return nullptr;
} }
KernelRegistry::~KernelRegistry() {
for (auto op_parameter : op_parameters_) {
delete(op_parameter);
}
op_parameters_.clear();
}
} // namespace mindspore::lite } // namespace mindspore::lite
...@@ -32,7 +32,7 @@ namespace mindspore::lite { ...@@ -32,7 +32,7 @@ namespace mindspore::lite {
class KernelRegistry { class KernelRegistry {
public: public:
KernelRegistry() = default; KernelRegistry() = default;
virtual ~KernelRegistry() = default; virtual ~KernelRegistry();
static KernelRegistry *GetInstance(); static KernelRegistry *GetInstance();
int Init(); int Init();
...@@ -54,6 +54,7 @@ class KernelRegistry { ...@@ -54,6 +54,7 @@ class KernelRegistry {
static const int op_type_length_{PrimitiveType_MAX - PrimitiveType_MIN + 1}; static const int op_type_length_{PrimitiveType_MAX - PrimitiveType_MIN + 1};
static const int array_size_{device_type_length_ * data_type_length_ * op_type_length_}; static const int array_size_{device_type_length_ * data_type_length_ * op_type_length_};
kernel::KernelCreator creator_arrays_[array_size_] = {0}; kernel::KernelCreator creator_arrays_[array_size_] = {0};
std::vector<OpParameter *> op_parameters_;
}; };
class KernelRegistrar { class KernelRegistrar {
......
...@@ -57,6 +57,7 @@ struct KernelKey { ...@@ -57,6 +57,7 @@ struct KernelKey {
class LiteKernel { class LiteKernel {
public: public:
LiteKernel() = default; LiteKernel() = default;
// parameter should be deleted or freed by caller, and should be deleted or freed after LiteKernel is deleted
LiteKernel(OpParameter *parameter, const std::vector<lite::tensor::Tensor *> &in_tensors, LiteKernel(OpParameter *parameter, const std::vector<lite::tensor::Tensor *> &in_tensors,
const std::vector<lite::tensor::Tensor *> &out_tensors, const lite::Context *ctx, const std::vector<lite::tensor::Tensor *> &out_tensors, const lite::Context *ctx,
const mindspore::lite::PrimitiveC *primitive) const mindspore::lite::PrimitiveC *primitive)
...@@ -72,12 +73,7 @@ class LiteKernel { ...@@ -72,12 +73,7 @@ class LiteKernel {
this->out_kernels_.clear(); this->out_kernels_.clear();
} }
virtual ~LiteKernel() { virtual ~LiteKernel() = default;
if (op_parameter_ != nullptr) {
delete op_parameter_;
op_parameter_ = nullptr;
}
}
virtual int Prepare() { virtual int Prepare() {
if (!InferShapeDone()) { if (!InferShapeDone()) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册