From 0457053d78d1be11f07ab10a099b9ff3dc3d235a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 13:57:52 +0800 Subject: [PATCH] [BugFix] Fix the mem_tracker use-after-free of UDF (backport #41710) (#41724) Co-authored-by: trueeyu --- be/src/udf/java/utils.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/be/src/udf/java/utils.cpp b/be/src/udf/java/utils.cpp index e05ae314afa33..071cfe0448f94 100644 --- a/be/src/udf/java/utils.cpp +++ b/be/src/udf/java/utils.cpp @@ -32,10 +32,14 @@ PromiseStatusPtr call_function_in_pthread(RuntimeState* state, const std::functi PromiseStatusPtr ms = std::make_unique(); if (bthread_self()) { state->exec_env()->udf_call_pool()->offer([promise = ms.get(), state, func]() { - MemTracker* prev_tracker = tls_thread_status.set_mem_tracker(state->instance_mem_tracker()); - SCOPED_SET_TRACE_INFO({}, state->query_id(), state->fragment_instance_id()); - DeferOp op([&] { tls_thread_status.set_mem_tracker(prev_tracker); }); - promise->set_value(func()); + Status st; + { + MemTracker* prev_tracker = tls_thread_status.set_mem_tracker(state->instance_mem_tracker()); + SCOPED_SET_TRACE_INFO({}, state->query_id(), state->fragment_instance_id()); + DeferOp op([&] { tls_thread_status.set_mem_tracker(prev_tracker); }); + st = func(); + } + promise->set_value(st); }); } else { ms->set_value(func());