From 454695e67f76a2d7e5d9f529198d82beea089311 Mon Sep 17 00:00:00 2001 From: robot-clickhouse Date: Wed, 11 Dec 2024 14:09:35 +0000 Subject: [PATCH] Backport #73081 to 24.9: Fix possible overestimate memory tracking --- src/Common/ThreadStatus.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Common/ThreadStatus.cpp b/src/Common/ThreadStatus.cpp index e38d3480664..77ad2769322 100644 --- a/src/Common/ThreadStatus.cpp +++ b/src/Common/ThreadStatus.cpp @@ -206,8 +206,6 @@ bool ThreadStatus::isQueryCanceled() const ThreadStatus::~ThreadStatus() { - flushUntrackedMemory(); - /// It may cause segfault if query_context was destroyed, but was not detached auto query_context_ptr = query_context.lock(); assert((!query_context_ptr && getQueryId().empty()) || (query_context_ptr && getQueryId() == query_context_ptr->getCurrentQueryId())); @@ -218,6 +216,9 @@ ThreadStatus::~ThreadStatus() chassert(!check_current_thread_on_destruction || current_thread == this); + /// Flush untracked_memory **right before** switching the current_thread to avoid losing untracked_memory in deleter (detachFromGroup) + flushUntrackedMemory(); + /// Only change current_thread if it's currently being used by this ThreadStatus /// For example, PushingToViews chain creates and deletes ThreadStatus instances while running in the main query thread if (current_thread == this)