forked from mindspore-Ecosystem/mindspore
!31136 fix memory leak by LiteMat when use operator=
Merge pull request !31136 from guozhijian/fix_memory_leak_by_LiteMat
This commit is contained in:
commit
95d57c67f6
|
@ -37,7 +37,7 @@ LiteMat::LiteMat() {
|
||||||
data_type_ = LDataType::UINT8;
|
data_type_ = LDataType::UINT8;
|
||||||
ref_count_ = nullptr;
|
ref_count_ = nullptr;
|
||||||
setSteps(0, 0, 0);
|
setSteps(0, 0, 0);
|
||||||
release_flag = false;
|
release_flag_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LiteMat::LiteMat(int width, LDataType data_type) {
|
LiteMat::LiteMat(int width, LDataType data_type) {
|
||||||
|
@ -52,7 +52,7 @@ LiteMat::LiteMat(int width, LDataType data_type) {
|
||||||
ref_count_ = nullptr;
|
ref_count_ = nullptr;
|
||||||
size_ = 0;
|
size_ = 0;
|
||||||
setSteps(0, 0, 0);
|
setSteps(0, 0, 0);
|
||||||
release_flag = false;
|
release_flag_ = false;
|
||||||
Init(width, data_type);
|
Init(width, data_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ LiteMat::LiteMat(int width, int height, LDataType data_type) {
|
||||||
ref_count_ = nullptr;
|
ref_count_ = nullptr;
|
||||||
size_ = 0;
|
size_ = 0;
|
||||||
setSteps(0, 0, 0);
|
setSteps(0, 0, 0);
|
||||||
release_flag = false;
|
release_flag_ = false;
|
||||||
Init(width, height, data_type);
|
Init(width, height, data_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ LiteMat::LiteMat(int width, int height, void *p_data, LDataType data_type) {
|
||||||
ref_count_ = nullptr;
|
ref_count_ = nullptr;
|
||||||
size_ = 0;
|
size_ = 0;
|
||||||
setSteps(0, 0, 0);
|
setSteps(0, 0, 0);
|
||||||
release_flag = false;
|
release_flag_ = false;
|
||||||
Init(width, height, p_data, data_type);
|
Init(width, height, p_data, data_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ LiteMat::LiteMat(int width, int height, int channel, LDataType data_type) {
|
||||||
ref_count_ = nullptr;
|
ref_count_ = nullptr;
|
||||||
size_ = 0;
|
size_ = 0;
|
||||||
setSteps(0, 0, 0);
|
setSteps(0, 0, 0);
|
||||||
release_flag = false;
|
release_flag_ = false;
|
||||||
Init(width, height, channel, data_type);
|
Init(width, height, channel, data_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ LiteMat::LiteMat(int width, int height, int channel, void *p_data, LDataType dat
|
||||||
ref_count_ = nullptr;
|
ref_count_ = nullptr;
|
||||||
size_ = 0;
|
size_ = 0;
|
||||||
setSteps(0, 0, 0);
|
setSteps(0, 0, 0);
|
||||||
release_flag = false;
|
release_flag_ = false;
|
||||||
Init(width, height, channel, p_data, data_type);
|
Init(width, height, channel, p_data, data_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ LiteMat::LiteMat(const LiteMat &m) {
|
||||||
data_type_ = m.data_type_;
|
data_type_ = m.data_type_;
|
||||||
ref_count_ = m.ref_count_;
|
ref_count_ = m.ref_count_;
|
||||||
size_ = m.size_;
|
size_ = m.size_;
|
||||||
release_flag = m.release_flag;
|
release_flag_ = m.release_flag_;
|
||||||
setSteps(m.steps_[0], m.steps_[1], m.steps_[2]);
|
setSteps(m.steps_[0], m.steps_[1], m.steps_[2]);
|
||||||
if (ref_count_) {
|
if (ref_count_) {
|
||||||
addRef(ref_count_, 1);
|
addRef(ref_count_, 1);
|
||||||
|
@ -173,6 +173,7 @@ LiteMat &LiteMat::operator=(const LiteMat &m) {
|
||||||
ref_count_ = m.ref_count_;
|
ref_count_ = m.ref_count_;
|
||||||
setSteps(m.steps_[0], m.steps_[1], m.steps_[2]);
|
setSteps(m.steps_[0], m.steps_[1], m.steps_[2]);
|
||||||
size_ = m.size_;
|
size_ = m.size_;
|
||||||
|
release_flag_ = m.release_flag_;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,7 +311,7 @@ void *LiteMat::AlignMalloc(unsigned int size) {
|
||||||
}
|
}
|
||||||
void *p_raw = reinterpret_cast<void *>(malloc(size + length));
|
void *p_raw = reinterpret_cast<void *>(malloc(size + length));
|
||||||
if (p_raw) {
|
if (p_raw) {
|
||||||
release_flag = true;
|
release_flag_ = true;
|
||||||
void **p_algin = reinterpret_cast<void **>(((size_t)(p_raw) + length) & ~(ALIGN - 1));
|
void **p_algin = reinterpret_cast<void **>(((size_t)(p_raw) + length) & ~(ALIGN - 1));
|
||||||
p_algin[-1] = p_raw;
|
p_algin[-1] = p_raw;
|
||||||
return p_algin;
|
return p_algin;
|
||||||
|
@ -319,10 +320,10 @@ void *LiteMat::AlignMalloc(unsigned int size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiteMat::AlignFree(void *ptr) {
|
void LiteMat::AlignFree(void *ptr) {
|
||||||
if (release_flag) {
|
if (release_flag_) {
|
||||||
(void)free(reinterpret_cast<void **>(ptr)[-1]);
|
(void)free(reinterpret_cast<void **>(ptr)[-1]);
|
||||||
ptr = nullptr;
|
ptr = nullptr;
|
||||||
release_flag = false;
|
release_flag_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -373,7 +373,7 @@ class LiteMat {
|
||||||
LDataType data_type_;
|
LDataType data_type_;
|
||||||
int *ref_count_;
|
int *ref_count_;
|
||||||
size_t steps_[MAX_DIMS];
|
size_t steps_[MAX_DIMS];
|
||||||
bool release_flag;
|
bool release_flag_;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// \brief Given image A and image B and calculate the difference of them (A - B).
|
/// \brief Given image A and image B and calculate the difference of them (A - B).
|
||||||
|
|
Loading…
Reference in New Issue