From c6f124e030ab7e3ee08f11acaea03d6cb6ba2f99 Mon Sep 17 00:00:00 2001 From: plat1ko Date: Sun, 30 Oct 2022 22:30:12 +0800 Subject: [PATCH] [feature](selectdb-cloud) Fix leak in VCollectorIterator (#962) `VCollectIterator::build_heap()` leaks memory when there is a `VCollectIterator::LevelIterator::init()` fails. --- be/src/vec/olap/vcollect_iterator.cpp | 6 ++++++ be/src/vec/olap/vcollect_iterator.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/be/src/vec/olap/vcollect_iterator.cpp b/be/src/vec/olap/vcollect_iterator.cpp index 7d4560f107d341..b9160514ad06f1 100644 --- a/be/src/vec/olap/vcollect_iterator.cpp +++ b/be/src/vec/olap/vcollect_iterator.cpp @@ -31,6 +31,12 @@ namespace vectorized { } \ } while (false) +VCollectIterator::~VCollectIterator() { + for (auto child : _children) { + delete child; + } +} + void VCollectIterator::init(TabletReader* reader, bool force_merge, bool is_reverse) { _reader = reader; // when aggregate is enabled or key_type is DUP_KEYS, we don't merge diff --git a/be/src/vec/olap/vcollect_iterator.h b/be/src/vec/olap/vcollect_iterator.h index 815752f28c108e..b16f752bc01aa5 100644 --- a/be/src/vec/olap/vcollect_iterator.h +++ b/be/src/vec/olap/vcollect_iterator.h @@ -37,7 +37,7 @@ namespace vectorized { class VCollectIterator { public: // Hold reader point to get reader params - ~VCollectIterator() = default; + ~VCollectIterator(); void init(TabletReader* reader, bool force_merge, bool is_reverse);