diff --git a/mindspore/lite/src/lite_session.cc b/mindspore/lite/src/lite_session.cc index 5dfd8f7f86..4911a819b1 100644 --- a/mindspore/lite/src/lite_session.cc +++ b/mindspore/lite/src/lite_session.cc @@ -716,6 +716,11 @@ LiteSession::~LiteSession() { if (tensor->IsConst() && !tensor->own_data()) { tensor->set_data(nullptr); } + + /* situation : user set graph-output-tensor data */ + if (tensor->IsGraphOutput() && tensor->allocator() == nullptr) { + tensor->set_data(nullptr); + } delete tensor; tensor = nullptr; } diff --git a/mindspore/lite/src/mindrt_executor.cc b/mindspore/lite/src/mindrt_executor.cc index 55b2581f88..b424b7616f 100644 --- a/mindspore/lite/src/mindrt_executor.cc +++ b/mindspore/lite/src/mindrt_executor.cc @@ -121,8 +121,18 @@ void MindrtExecutor::TransferGraphOutput() { void MindrtExecutor::FreeOutputTensor() { for (auto tensor_map : *output_tensor_map_) { + auto src_tensor = tensor_map.first; auto dst_tensor = tensor_map.second; - dst_tensor->FreeData(); + if (dst_tensor->allocator() != nullptr) { + dst_tensor->FreeData(); + } else { + if (dst_tensor->data_type() == src_tensor->data_type()) { + /* user set graph-output-tensor from outside */ + src_tensor->set_data(dst_tensor->data()); + src_tensor->set_own_data(false); + src_tensor->set_allocator(nullptr); + } + } } return; }