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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]