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]

Reply via email to