This is an automated email from the ASF dual-hosted git repository. dataroaring 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 c7b2b90504 [fix](memtracker) Fix DCHECK !std::count(_consumer_tracker_stack.begin(), _consumer_tracker_stack.end(), tracker) c7b2b90504 is described below commit c7b2b9050463020a3c44e579a79abebbbc20dd89 Author: Xinyi Zou <zouxiny...@gmail.com> AuthorDate: Sun Nov 6 16:41:03 2022 +0800 [fix](memtracker) Fix DCHECK !std::count(_consumer_tracker_stack.begin(), _consumer_tracker_stack.end(), tracker) --- be/src/runtime/memory/thread_mem_tracker_mgr.h | 10 ++++++---- be/src/runtime/thread_context.cpp | 7 ++++--- be/src/runtime/thread_context.h | 1 + 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/be/src/runtime/memory/thread_mem_tracker_mgr.h b/be/src/runtime/memory/thread_mem_tracker_mgr.h index 4661fbea5d..03ccacdeba 100644 --- a/be/src/runtime/memory/thread_mem_tracker_mgr.h +++ b/be/src/runtime/memory/thread_mem_tracker_mgr.h @@ -78,7 +78,7 @@ public: // Must be fast enough! Thread update_tracker may be called very frequently. // So for performance, add tracker as early as possible, and then call update_tracker<Existed>. - void push_consumer_tracker(MemTracker* mem_tracker); + bool push_consumer_tracker(MemTracker* mem_tracker); void pop_consumer_tracker(); std::string last_consumer_tracker() { return _consumer_tracker_stack.empty() ? "" : _consumer_tracker_stack.back()->label(); @@ -191,12 +191,14 @@ inline void ThreadMemTrackerMgr::clear() { init_impl(); } -inline void ThreadMemTrackerMgr::push_consumer_tracker(MemTracker* tracker) { +inline bool ThreadMemTrackerMgr::push_consumer_tracker(MemTracker* tracker) { DCHECK(tracker) << print_debug_string(); - DCHECK(!std::count(_consumer_tracker_stack.begin(), _consumer_tracker_stack.end(), tracker)) - << print_debug_string(); + if (std::count(_consumer_tracker_stack.begin(), _consumer_tracker_stack.end(), tracker)) { + return false; + } _consumer_tracker_stack.push_back(tracker); tracker->release(_untracked_mem); + return true; } inline void ThreadMemTrackerMgr::pop_consumer_tracker() { diff --git a/be/src/runtime/thread_context.cpp b/be/src/runtime/thread_context.cpp index babee85c3e..442fe755a6 100644 --- a/be/src/runtime/thread_context.cpp +++ b/be/src/runtime/thread_context.cpp @@ -76,20 +76,21 @@ SwitchThreadMemTrackerLimiter::~SwitchThreadMemTrackerLimiter() { } AddThreadMemTrackerConsumer::AddThreadMemTrackerConsumer(MemTracker* mem_tracker) { - thread_context()->_thread_mem_tracker_mgr->push_consumer_tracker(mem_tracker); + _need_pop = thread_context()->_thread_mem_tracker_mgr->push_consumer_tracker(mem_tracker); } AddThreadMemTrackerConsumer::AddThreadMemTrackerConsumer( const std::shared_ptr<MemTracker>& mem_tracker) : _mem_tracker(mem_tracker) { - thread_context()->_thread_mem_tracker_mgr->push_consumer_tracker(_mem_tracker.get()); + _need_pop = + thread_context()->_thread_mem_tracker_mgr->push_consumer_tracker(_mem_tracker.get()); } AddThreadMemTrackerConsumer::~AddThreadMemTrackerConsumer() { #ifndef NDEBUG DorisMetrics::instance()->add_thread_mem_tracker_consumer_count->increment(1); #endif // NDEBUG - thread_context()->_thread_mem_tracker_mgr->pop_consumer_tracker(); + if (_need_pop) thread_context()->_thread_mem_tracker_mgr->pop_consumer_tracker(); } } // namespace doris diff --git a/be/src/runtime/thread_context.h b/be/src/runtime/thread_context.h index 7d213bfa4d..48ff9cc389 100644 --- a/be/src/runtime/thread_context.h +++ b/be/src/runtime/thread_context.h @@ -311,6 +311,7 @@ public: private: std::shared_ptr<MemTracker> _mem_tracker = nullptr; // Avoid mem_tracker being released midway. + bool _need_pop = false; }; class StopCheckThreadMemTrackerLimit { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org