!12322 [MS][LITE] fix memory leak when repeatedly running the session

From: @probiotics_53
Reviewed-by: @zhanghaibo5,@HilbertDavid
Signed-off-by: @zhanghaibo5
This commit is contained in:
mindspore-ci-bot 2021-02-10 12:56:34 +08:00 committed by Gitee
commit 2c22d2bb3a
6 changed files with 16 additions and 16 deletions

View File

@ -36,6 +36,7 @@ int CropBaseCPUKernel::ReSize() {
auto output_shape = out_tensor->shape();
size_t input_dim = input_shape.size();
size_t output_dim = output_shape.size();
FreeTmpBuffer();
crop_para_->in_shape_ = reinterpret_cast<int *>(malloc(input_dim * sizeof(int)));
if (crop_para_->in_shape_ == nullptr) {
@ -76,4 +77,15 @@ void CropBaseCPUKernel::PadOffset(int input_dim, CropParameter *crop_para) {
crop_para->in_offset_[i] = crop_offset;
}
}
void CropBaseCPUKernel::FreeTmpBuffer() {
if (crop_para_->in_shape_ != nullptr) {
free(crop_para_->in_shape_);
crop_para_->in_shape_ = nullptr;
}
if (crop_para_->out_shape_ != nullptr) {
free(crop_para_->out_shape_);
crop_para_->out_shape_ = nullptr;
}
}
} // namespace mindspore::kernel

View File

@ -31,20 +31,12 @@ class CropBaseCPUKernel : public LiteKernel {
crop_para_ = reinterpret_cast<CropParameter *>(op_parameter_);
crop_para_->thread_count_ = op_parameter_->thread_num_;
}
~CropBaseCPUKernel() {
if (crop_para_->in_shape_ != nullptr) {
free(crop_para_->in_shape_);
crop_para_->in_shape_ = nullptr;
}
if (crop_para_->out_shape_ != nullptr) {
free(crop_para_->out_shape_);
crop_para_->out_shape_ = nullptr;
}
}
~CropBaseCPUKernel() = default;
int Init() override;
int ReSize() override;
int Run() override { return 0; }
void FreeTmpBuffer();
protected:
CropParameter *crop_para_;

View File

@ -31,8 +31,6 @@ int CropFp16CPUKernel::Init() {
return ReSize();
}
int CropFp16CPUKernel::ReSize() { return CropBaseCPUKernel::ReSize(); }
int CropFp16CPUKernel::DoExecute(int task_id) {
Fp16Crop(input_ptr_, output_ptr_, task_id, crop_para_);
return RET_OK;
@ -59,6 +57,7 @@ int CropFp16CPUKernel::Run() {
if (ret != RET_OK) {
MS_LOG(ERROR) << "ParallelLaunch failed: " << ret;
}
FreeTmpBuffer();
return ret;
}

View File

@ -36,7 +36,6 @@ class CropFp16CPUKernel : public CropBaseCPUKernel {
~CropFp16CPUKernel() override = default;
int Init() override;
int ReSize() override;
int Run() override;
int DoExecute(int task_id);

View File

@ -43,8 +43,6 @@ int CropCPUKernel::Init() {
return ReSize();
}
int CropCPUKernel::ReSize() { return CropBaseCPUKernel::ReSize(); }
int CropCPUKernel::CropParallelRun(int thread_id) {
auto input = in_tensors_[0];
auto output = out_tensors_[0];
@ -69,6 +67,7 @@ int CropCPUKernel::Run() {
MS_LOG(ERROR) << "Crop launch fail!ret: " << ret;
return RET_ERROR;
}
FreeTmpBuffer();
return RET_OK;
}

View File

@ -33,7 +33,6 @@ class CropCPUKernel : public CropBaseCPUKernel {
: CropBaseCPUKernel(parameter, inputs, outputs, ctx, primitive) {}
~CropCPUKernel() = default;
int Init() override;
int ReSize() override;
int Run() override;
int CropParallelRun(int thread_id);
};