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