From db89503c893d9b95d8ac68aee018e3f5dd295208 Mon Sep 17 00:00:00 2001 From: gongdaguo Date: Fri, 6 Nov 2020 15:11:50 +0800 Subject: [PATCH] fix mem leak --- .../app/src/main/cpp/MSNetWork.cpp | 24 +++++++++++++------ .../Himindspore/app/src/main/cpp/MSNetWork.h | 3 ++- .../app/src/main/cpp/MSNetWork.cpp | 23 ++++++++++++------ .../app/src/main/cpp/MSNetWork.h | 3 ++- .../app/src/main/cpp/MSNetWork.cpp | 24 ++++++++++++------- .../app/src/main/cpp/MSNetWork.h | 3 ++- 6 files changed, 55 insertions(+), 25 deletions(-) diff --git a/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.cpp b/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.cpp index dd2c5c60f2..0c9d8f660f 100644 --- a/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.cpp +++ b/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.cpp @@ -18,10 +18,11 @@ #include #include #include +#include "include/errorcode.h" #define MS_PRINT(format, ...) __android_log_print(ANDROID_LOG_INFO, "MSJNI", format, ##__VA_ARGS__) -MSNetWork::MSNetWork(void) : session_(nullptr) {} +MSNetWork::MSNetWork(void) : session_(nullptr), model_(nullptr) {} MSNetWork::~MSNetWork(void) {} @@ -33,20 +34,29 @@ void MSNetWork::CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore:: } // Compile model. - auto model = mindspore::lite::Model::Import(modelBuffer, bufferLen); - if (model == nullptr) { + model_ = mindspore::lite::Model::Import(modelBuffer, bufferLen); + if (model_ == nullptr) { + ReleaseNets(); MS_PRINT("Import model failed."); return; } - int ret = session_->CompileGraph(model); + int ret = session_->CompileGraph(model_); if (ret != mindspore::lite::RET_OK) { + ReleaseNets(); MS_PRINT("CompileGraph failed."); return; } } -int MSNetWork::ReleaseNets(void) { - delete session_; - return 0; +void MSNetWork::ReleaseNets(void) { + if (model_ != nullptr) { + model_->Free(); + delete model_; + model_ = nullptr; + } + if (session_ != nullptr) { + delete session_; + session_ = nullptr; + } } diff --git a/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.h b/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.h index a6498b95a6..5078731b7e 100644 --- a/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.h +++ b/model_zoo/official/lite/Himindspore/app/src/main/cpp/MSNetWork.h @@ -50,10 +50,11 @@ class MSNetWork { void CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore::lite::Context *ctx); - int ReleaseNets(void); + void ReleaseNets(void); mindspore::session::LiteSession *session() const { return session_; } private: mindspore::session::LiteSession *session_; + mindspore::lite::Model *model_; }; #endif diff --git a/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.cpp b/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.cpp index 17d0d5373d..0c9d8f660f 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.cpp +++ b/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.cpp @@ -22,7 +22,7 @@ #define MS_PRINT(format, ...) __android_log_print(ANDROID_LOG_INFO, "MSJNI", format, ##__VA_ARGS__) -MSNetWork::MSNetWork(void) : session_(nullptr) {} +MSNetWork::MSNetWork(void) : session_(nullptr), model_(nullptr) {} MSNetWork::~MSNetWork(void) {} @@ -34,20 +34,29 @@ void MSNetWork::CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore:: } // Compile model. - auto model = mindspore::lite::Model::Import(modelBuffer, bufferLen); - if (model == nullptr) { + model_ = mindspore::lite::Model::Import(modelBuffer, bufferLen); + if (model_ == nullptr) { + ReleaseNets(); MS_PRINT("Import model failed."); return; } - int ret = session_->CompileGraph(model); + int ret = session_->CompileGraph(model_); if (ret != mindspore::lite::RET_OK) { + ReleaseNets(); MS_PRINT("CompileGraph failed."); return; } } -int MSNetWork::ReleaseNets(void) { - delete session_; - return 0; +void MSNetWork::ReleaseNets(void) { + if (model_ != nullptr) { + model_->Free(); + delete model_; + model_ = nullptr; + } + if (session_ != nullptr) { + delete session_; + session_ = nullptr; + } } diff --git a/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.h b/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.h index a6498b95a6..5078731b7e 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.h +++ b/model_zoo/official/lite/image_classification/app/src/main/cpp/MSNetWork.h @@ -50,10 +50,11 @@ class MSNetWork { void CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore::lite::Context *ctx); - int ReleaseNets(void); + void ReleaseNets(void); mindspore::session::LiteSession *session() const { return session_; } private: mindspore::session::LiteSession *session_; + mindspore::lite::Model *model_; }; #endif diff --git a/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.cpp b/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.cpp index 5e71cdaf95..0c9d8f660f 100644 --- a/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.cpp +++ b/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.cpp @@ -22,7 +22,7 @@ #define MS_PRINT(format, ...) __android_log_print(ANDROID_LOG_INFO, "MSJNI", format, ##__VA_ARGS__) -MSNetWork::MSNetWork(void) : session_(nullptr) {} +MSNetWork::MSNetWork(void) : session_(nullptr), model_(nullptr) {} MSNetWork::~MSNetWork(void) {} @@ -34,21 +34,29 @@ void MSNetWork::CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore:: } // Compile model. - auto model = mindspore::lite::Model::Import(modelBuffer, bufferLen); - if (model == nullptr) { + model_ = mindspore::lite::Model::Import(modelBuffer, bufferLen); + if (model_ == nullptr) { + ReleaseNets(); MS_PRINT("Import model failed."); return; } - int ret = session_->CompileGraph(model); + int ret = session_->CompileGraph(model_); if (ret != mindspore::lite::RET_OK) { + ReleaseNets(); MS_PRINT("CompileGraph failed."); return; } } -int MSNetWork::ReleaseNets(void) { - delete session_; - return 0; +void MSNetWork::ReleaseNets(void) { + if (model_ != nullptr) { + model_->Free(); + delete model_; + model_ = nullptr; + } + if (session_ != nullptr) { + delete session_; + session_ = nullptr; + } } - diff --git a/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.h b/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.h index a6498b95a6..5078731b7e 100644 --- a/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.h +++ b/model_zoo/official/lite/object_detection/app/src/main/cpp/MSNetWork.h @@ -50,10 +50,11 @@ class MSNetWork { void CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore::lite::Context *ctx); - int ReleaseNets(void); + void ReleaseNets(void); mindspore::session::LiteSession *session() const { return session_; } private: mindspore::session::LiteSession *session_; + mindspore::lite::Model *model_; }; #endif