Skip to content

Commit e231bba

Browse files
branch-4.0: [Bug](memtracker) fix wrong memtracker scope on PipelineTask destructor #57276 (#57280)
Cherry-picked from #57276 Co-authored-by: Pxl <[email protected]>
1 parent bd49d2d commit e231bba

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

be/src/pipeline/pipeline_task.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,22 +96,27 @@ PipelineTask::PipelineTask(PipelinePtr& pipeline, uint32_t task_id, RuntimeState
9696
}
9797

9898
PipelineTask::~PipelineTask() {
99+
auto reset_member = [&]() {
100+
_shared_state_map.clear();
101+
_sink_shared_state.reset();
102+
_op_shared_states.clear();
103+
_sink.reset();
104+
_operators.clear();
105+
_block.reset();
106+
_pipeline.reset();
107+
};
99108
// PipelineTask is also hold by task queue( https://github.com/apache/doris/pull/49753),
100109
// so that it maybe the last one to be destructed.
101110
// But pipeline task hold some objects, like operators, shared state, etc. So that should release
102111
// memory manually.
103112
#ifndef BE_TEST
104113
if (_query_mem_tracker) {
105114
SCOPED_SWITCH_THREAD_MEM_TRACKER_LIMITER(_query_mem_tracker);
115+
reset_member();
116+
return;
106117
}
107118
#endif
108-
_shared_state_map.clear();
109-
_sink_shared_state.reset();
110-
_op_shared_states.clear();
111-
_sink.reset();
112-
_operators.clear();
113-
_block.reset();
114-
_pipeline.reset();
119+
reset_member();
115120
}
116121

117122
Status PipelineTask::prepare(const std::vector<TScanRangeParams>& scan_range, const int sender_id,

0 commit comments

Comments
 (0)