This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 3f221e1 [fix](memory-leak) using unique_ptr to refactor some fields
(#7933)
3f221e1 is described below
commit 3f221e1d0b068ebec813b2022a2419f5b96a7cb8
Author: wangbo <[email protected]>
AuthorDate: Sun Jan 30 16:49:04 2022 +0800
[fix](memory-leak) using unique_ptr to refactor some fields (#7933)
Using unique_ptr to refactor some class members.
Fix mem leak for `SegmentIterator`'s `_pre_eval_block_predicate`.
---
be/src/olap/rowset/segment_v2/column_reader.cpp | 9 +++------
be/src/olap/rowset/segment_v2/column_reader.h | 4 ++--
be/src/olap/rowset/segment_v2/segment_iterator.cpp | 2 +-
be/src/olap/rowset/segment_v2/segment_iterator.h | 2 +-
4 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp
b/be/src/olap/rowset/segment_v2/column_reader.cpp
index 4f97218..9b14ff4 100644
--- a/be/src/olap/rowset/segment_v2/column_reader.cpp
+++ b/be/src/olap/rowset/segment_v2/column_reader.cpp
@@ -459,9 +459,6 @@ FileColumnIterator::FileColumnIterator(ColumnReader*
reader) : _reader(reader) {
FileColumnIterator::~FileColumnIterator() {
_opts.mem_tracker->Release(_opts.mem_tracker->consumption());
-
- delete[] _dict_start_offset_array;
- delete[] _dict_len_array;
}
Status FileColumnIterator::seek_to_first() {
@@ -679,8 +676,8 @@ Status FileColumnIterator::_read_data_page(const
OrdinalPageIndexIterator& iter)
RETURN_IF_ERROR(_dict_decoder->init());
auto* pd_decoder =
(BinaryPlainPageDecoder*)_dict_decoder.get();
- _dict_start_offset_array = new
uint32_t[pd_decoder->_num_elems];
- _dict_len_array = new uint32_t[pd_decoder->_num_elems];
+ _dict_start_offset_array.reset(new
uint32_t[pd_decoder->_num_elems]);
+ _dict_len_array.reset(new uint32_t[pd_decoder->_num_elems]);
// todo(wb) padding dict value for SIMD comparison
for (int i = 0; i < pd_decoder->_num_elems; i++) {
@@ -691,7 +688,7 @@ Status FileColumnIterator::_read_data_page(const
OrdinalPageIndexIterator& iter)
}
}
- dict_page_decoder->set_dict_decoder(_dict_decoder.get(),
_dict_start_offset_array, _dict_len_array);
+ dict_page_decoder->set_dict_decoder(_dict_decoder.get(),
_dict_start_offset_array.get(), _dict_len_array.get());
}
}
return Status::OK();
diff --git a/be/src/olap/rowset/segment_v2/column_reader.h
b/be/src/olap/rowset/segment_v2/column_reader.h
index 8925e02..e2e6c35 100644
--- a/be/src/olap/rowset/segment_v2/column_reader.h
+++ b/be/src/olap/rowset/segment_v2/column_reader.h
@@ -320,8 +320,8 @@ private:
// current value ordinal
ordinal_t _current_ordinal = 0;
- uint32_t* _dict_start_offset_array = nullptr;
- uint32_t* _dict_len_array = nullptr;
+ std::unique_ptr<uint32_t[]> _dict_start_offset_array;
+ std::unique_ptr<uint32_t[]> _dict_len_array;
};
class ArrayFileColumnIterator final : public ColumnIterator {
diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp
b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
index 22c4ff1..e5c7e08 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
@@ -618,7 +618,7 @@ void SegmentIterator::_vec_init_lazy_materialization() {
} else {
vec_pred_col_id_set.insert(predicate->column_id());
if (_pre_eval_block_predicate == nullptr) {
- _pre_eval_block_predicate = new AndBlockColumnPredicate();
+ _pre_eval_block_predicate.reset(new
AndBlockColumnPredicate());
}
_pre_eval_block_predicate->add_column_predicate(new
SingleColumnBlockPredicate(predicate));
}
diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.h
b/be/src/olap/rowset/segment_v2/segment_iterator.h
index d7778ac..0577526 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.h
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.h
@@ -134,7 +134,7 @@ private:
std::vector<ColumnId> _short_cir_pred_column_ids; // keep columnId of
columns for short circuit predicate evaluation
vector<bool> _is_pred_column; // columns hold by segmentIter
vectorized::MutableColumns _current_return_columns;
- AndBlockColumnPredicate* _pre_eval_block_predicate = nullptr;
+ std::unique_ptr<AndBlockColumnPredicate> _pre_eval_block_predicate;
std::vector<ColumnPredicate*> _short_cir_eval_predicate;
// when lazy materialization is enable, segmentIter need to read data at
least twice
// first, read predicate columns by various index
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]