1be168c0dSopenharmony_ciFrom 1b10553fa964dc02c9d126dcd8b1422fd0f188af Mon Sep 17 00:00:00 2001
2be168c0dSopenharmony_ciFrom: chengfeng27 <chengfeng27@huawei.com>
3be168c0dSopenharmony_ciDate: Tue, 10 Sep 2024 22:03:13 +0800
4be168c0dSopenharmony_ciSubject: [PATCH] fix mutable memory leak
5be168c0dSopenharmony_ci
6be168c0dSopenharmony_ci---
7be168c0dSopenharmony_ci mindspore/lite/src/litert/c_api/tensor_c.cc            | 1 +
8be168c0dSopenharmony_ci mindspore/lite/src/litert/cxx_api/tensor/tensor_impl.h | 4 +++-
9be168c0dSopenharmony_ci mindspore/lite/src/litert/kernel/cpu/int8/pad_int8.h   | 3 +++
10be168c0dSopenharmony_ci mindspore/lite/src/tensor.cc                           | 2 +-
11be168c0dSopenharmony_ci 4 files changed, 8 insertions(+), 2 deletions(-)
12be168c0dSopenharmony_ci
13be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/c_api/tensor_c.cc b/mindspore/lite/src/litert/c_api/tensor_c.cc
14be168c0dSopenharmony_ciindex 7d6c7930..4e7a1e56 100644
15be168c0dSopenharmony_ci--- a/mindspore/lite/src/litert/c_api/tensor_c.cc
16be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/c_api/tensor_c.cc
17be168c0dSopenharmony_ci@@ -47,6 +47,7 @@ OH_AI_TensorHandle OH_AI_TensorCreate(const char *name, OH_AI_DataType type, con
18be168c0dSopenharmony_ci     return nullptr;
19be168c0dSopenharmony_ci   }
20be168c0dSopenharmony_ci   lite_tensor_impl->set_from_session(false);
21be168c0dSopenharmony_ci+  lite_tensor_impl->set_own_data(lite_tensor_impl->lite_tensor()->own_data());
22be168c0dSopenharmony_ci   auto impl = new (std::nothrow) mindspore::MSTensor(lite_tensor_impl);
23be168c0dSopenharmony_ci   if (impl == nullptr) {
24be168c0dSopenharmony_ci     MS_LOG(ERROR) << "Failed to allocate MSTensor.";
25be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/cxx_api/tensor/tensor_impl.h b/mindspore/lite/src/litert/cxx_api/tensor/tensor_impl.h
26be168c0dSopenharmony_ciindex be3743c4..6d9404d2 100644
27be168c0dSopenharmony_ci--- a/mindspore/lite/src/litert/cxx_api/tensor/tensor_impl.h
28be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/cxx_api/tensor/tensor_impl.h
29be168c0dSopenharmony_ci@@ -184,7 +184,9 @@ class LiteTensorImpl : public MutableTensorImpl {
30be168c0dSopenharmony_ci       MS_LOG(ERROR) << "Invalid tensor.";
31be168c0dSopenharmony_ci       return nullptr;
32be168c0dSopenharmony_ci     }
33be168c0dSopenharmony_ci-    return lite_tensor_->MutableData();
34be168c0dSopenharmony_ci+    auto ret = lite_tensor_->MutableData();
35be168c0dSopenharmony_ci+    own_data_ = lite_tensor_->own_data();
36be168c0dSopenharmony_ci+    return ret;
37be168c0dSopenharmony_ci   }
38be168c0dSopenharmony_ci   bool IsConst() const override {
39be168c0dSopenharmony_ci     if (lite_tensor_ == nullptr) {
40be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/kernel/cpu/int8/pad_int8.h b/mindspore/lite/src/litert/kernel/cpu/int8/pad_int8.h
41be168c0dSopenharmony_ciindex 067d527a..81fd2057 100644
42be168c0dSopenharmony_ci--- a/mindspore/lite/src/litert/kernel/cpu/int8/pad_int8.h
43be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/kernel/cpu/int8/pad_int8.h
44be168c0dSopenharmony_ci@@ -33,6 +33,9 @@ class PadInt8CPUKernel : public LiteKernel {
45be168c0dSopenharmony_ci       : LiteKernel(parameter, inputs, outputs, ctx) {
46be168c0dSopenharmony_ci     op_parameter_->thread_num_ = ctx->thread_num_;
47be168c0dSopenharmony_ci     pad_param_ = reinterpret_cast<PadParameter *>(op_parameter_);
48be168c0dSopenharmony_ci+    pad_quant_arg_.in_quant_args_ = nullptr;
49be168c0dSopenharmony_ci+    pad_quant_arg_.out_quanr_args_ = nullptr;
50be168c0dSopenharmony_ci+    pad_quant_arg_.constant_value_ = nullptr;
51be168c0dSopenharmony_ci   }
52be168c0dSopenharmony_ci   ~PadInt8CPUKernel() override { FreeQuantParam(); };
53be168c0dSopenharmony_ci 
54be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/tensor.cc b/mindspore/lite/src/tensor.cc
55be168c0dSopenharmony_ciindex 6e97750a..7e54a80c 100644
56be168c0dSopenharmony_ci--- a/mindspore/lite/src/tensor.cc
57be168c0dSopenharmony_ci+++ b/mindspore/lite/src/tensor.cc
58be168c0dSopenharmony_ci@@ -567,7 +567,7 @@ Tensor *Tensor::CreateTensor(const std::string &name, TypeId type, const std::ve
59be168c0dSopenharmony_ci     MS_LOG(ERROR) << "shape, data type and data len not match.";
60be168c0dSopenharmony_ci     return nullptr;
61be168c0dSopenharmony_ci   }
62be168c0dSopenharmony_ci-  tensor->set_data(const_cast<void *>(data));
63be168c0dSopenharmony_ci+  tensor->set_data(const_cast<void *>(data), false);
64be168c0dSopenharmony_ci   tensor->set_shape(shape);
65be168c0dSopenharmony_ci   tensor->set_tensor_name(name);
66be168c0dSopenharmony_ci   tensor->set_data_type(type);
67be168c0dSopenharmony_ci-- 
68be168c0dSopenharmony_ci2.17.1
69be168c0dSopenharmony_ci
70