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

Reply via email to