This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 659e863bd7 [bugfix] fix tcmalooc hook cancel deadlock (#10514) 659e863bd7 is described below commit 659e863bd73ee8644dd1ebd42c1d5148343635cd Author: Kidd <107781942+k-i-...@users.noreply.github.com> AuthorDate: Fri Jul 1 10:41:59 2022 +0800 [bugfix] fix tcmalooc hook cancel deadlock (#10514) --- be/src/runtime/data_stream_recvr.cc | 6 ++++++ be/src/runtime/exec_env_init.cpp | 10 ++++------ be/src/vec/runtime/vdata_stream_recvr.cpp | 6 ++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/be/src/runtime/data_stream_recvr.cc b/be/src/runtime/data_stream_recvr.cc index 3e3774c40b..5fb2981993 100644 --- a/be/src/runtime/data_stream_recvr.cc +++ b/be/src/runtime/data_stream_recvr.cc @@ -203,6 +203,9 @@ Status DataStreamRecvr::SenderQueue::get_batch(RowBatch** next_batch) { void DataStreamRecvr::SenderQueue::add_batch(const PRowBatch& pb_batch, int be_number, int64_t packet_seq, ::google::protobuf::Closure** done) { + // Avoid deadlock when calling SenderQueue::cancel() in tcmalloc hook, + // limit memory via DataStreamRecvr::exceeds_limit. + STOP_CHECK_LIMIT_THREAD_LOCAL_MEM_TRACKER(); lock_guard<mutex> l(_lock); if (_is_cancelled) { return; @@ -272,6 +275,9 @@ void DataStreamRecvr::SenderQueue::add_batch(const PRowBatch& pb_batch, int be_n } void DataStreamRecvr::SenderQueue::add_batch(RowBatch* batch, bool use_move) { + // Avoid deadlock when calling SenderQueue::cancel() in tcmalloc hook, + // limit memory via DataStreamRecvr::exceeds_limit. + STOP_CHECK_LIMIT_THREAD_LOCAL_MEM_TRACKER(); unique_lock<mutex> l(_lock); if (_is_cancelled) { return; diff --git a/be/src/runtime/exec_env_init.cpp b/be/src/runtime/exec_env_init.cpp index 2347d2bea8..8571fadc00 100644 --- a/be/src/runtime/exec_env_init.cpp +++ b/be/src/runtime/exec_env_init.cpp @@ -182,14 +182,12 @@ Status ExecEnv::_init_mem_tracker() { global_memory_limit_bytes = MemInfo::physical_mem(); } MemTracker::get_process_tracker()->set_limit(global_memory_limit_bytes); - _query_pool_mem_tracker = MemTracker::create_tracker(global_memory_limit_bytes, "QueryPool", - MemTracker::get_process_tracker(), - MemTrackerLevel::OVERVIEW); + _query_pool_mem_tracker = MemTracker::create_tracker( + -1, "QueryPool", MemTracker::get_process_tracker(), MemTrackerLevel::OVERVIEW); REGISTER_HOOK_METRIC(query_mem_consumption, [this]() { return _query_pool_mem_tracker->consumption(); }); - _load_pool_mem_tracker = MemTracker::create_tracker(global_memory_limit_bytes, "LoadPool", - MemTracker::get_process_tracker(), - MemTrackerLevel::OVERVIEW); + _load_pool_mem_tracker = MemTracker::create_tracker( + -1, "LoadPool", MemTracker::get_process_tracker(), MemTrackerLevel::OVERVIEW); REGISTER_HOOK_METRIC(load_mem_consumption, [this]() { return _load_pool_mem_tracker->consumption(); }); LOG(INFO) << "Using global memory limit: " diff --git a/be/src/vec/runtime/vdata_stream_recvr.cpp b/be/src/vec/runtime/vdata_stream_recvr.cpp index 66c2ebb4fe..d7f6c62a42 100644 --- a/be/src/vec/runtime/vdata_stream_recvr.cpp +++ b/be/src/vec/runtime/vdata_stream_recvr.cpp @@ -90,6 +90,9 @@ Status VDataStreamRecvr::SenderQueue::get_batch(Block** next_block) { void VDataStreamRecvr::SenderQueue::add_block(const PBlock& pblock, int be_number, int64_t packet_seq, ::google::protobuf::Closure** done) { + // Avoid deadlock when calling SenderQueue::cancel() in tcmalloc hook, + // limit memory via DataStreamRecvr::exceeds_limit. + STOP_CHECK_LIMIT_THREAD_LOCAL_MEM_TRACKER(); std::lock_guard<std::mutex> l(_lock); if (_is_cancelled) { return; @@ -140,6 +143,9 @@ void VDataStreamRecvr::SenderQueue::add_block(const PBlock& pblock, int be_numbe } void VDataStreamRecvr::SenderQueue::add_block(Block* block, bool use_move) { + // Avoid deadlock when calling SenderQueue::cancel() in tcmalloc hook, + // limit memory via DataStreamRecvr::exceeds_limit. + STOP_CHECK_LIMIT_THREAD_LOCAL_MEM_TRACKER(); std::unique_lock<std::mutex> l(_lock); if (_is_cancelled) { return; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org