Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/intgemm/intgemm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjlquinn <jlquinn@optonline.net>2022-01-30 01:37:17 +0300
committerGitHub <noreply@github.com>2022-01-30 01:37:17 +0300
commit1b8cbd6f611c21011325cfe0312940f0635dea33 (patch)
tree40841cbeac5b9e81fabafa4abeab80df33d7d52a
parenta56f8225c2ebade4a742b1e691514c7d6c9def3d (diff)
Fix memory leak in AlignedVector. (#96)
Co-authored-by: Jerry Quinn <jlquinn@us.ibm.com>
-rw-r--r--intgemm/aligned.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/intgemm/aligned.h b/intgemm/aligned.h
index cba7d06..6b55ff2 100644
--- a/intgemm/aligned.h
+++ b/intgemm/aligned.h
@@ -47,6 +47,8 @@ template <class T> class AlignedVector {
}
AlignedVector &operator=(AlignedVector &&from) {
+ if (this == &from) return *this;
+ release();
mem_ = from.mem_;
size_ = from.size_;
from.mem_ = nullptr;
@@ -57,13 +59,7 @@ template <class T> class AlignedVector {
AlignedVector(const AlignedVector&) = delete;
AlignedVector& operator=(const AlignedVector&) = delete;
- ~AlignedVector() {
-#ifdef _MSC_VER
- _aligned_free(mem_);
-#else
- std::free(mem_);
-#endif
- }
+ ~AlignedVector() { release(); }
std::size_t size() const { return size_; }
@@ -81,6 +77,14 @@ template <class T> class AlignedVector {
private:
T *mem_;
std::size_t size_;
+
+ void release() {
+#ifdef _MSC_VER
+ _aligned_free(mem_);
+#else
+ std::free(mem_);
+#endif
+ }
};
} // namespace intgemm