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