From dc18da2ce402ec3a1f174b0e3ceb6ec0ea67b7eb Mon Sep 17 00:00:00 2001 From: HappenLee Date: Wed, 17 May 2023 21:37:38 +0800 Subject: [PATCH] [Log](expr) add DCHECK info for expr close DCHECK (#19683) --- be/src/common/object_pool.h | 7 ++++++- be/src/vec/exprs/vexpr.cpp | 2 -- be/src/vec/exprs/vexpr_context.cpp | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/be/src/common/object_pool.h b/be/src/common/object_pool.h index 253383657a..b0552f7e43 100644 --- a/be/src/common/object_pool.h +++ b/be/src/common/object_pool.h @@ -50,7 +50,12 @@ public: void clear() { std::lock_guard l(_lock); - for (Element& elem : _objects) elem.delete_fn(elem.obj); + // reverse delete object to make sure the obj can + // safe access the member object construt early by + // object pool + for (auto obj = _objects.rbegin(); obj != _objects.rend(); obj++) { + obj->delete_fn(obj->obj); + } _objects.clear(); } diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp index f6b08c5fd1..23c6e115d6 100644 --- a/be/src/vec/exprs/vexpr.cpp +++ b/be/src/vec/exprs/vexpr.cpp @@ -345,8 +345,6 @@ std::string VExpr::debug_string() const { // TODO: implement partial debug string for member vars std::stringstream out; out << " type=" << _type.debug_string(); - out << " codegen=" - << "false"; if (!_children.empty()) { out << " children=" << debug_string(_children); diff --git a/be/src/vec/exprs/vexpr_context.cpp b/be/src/vec/exprs/vexpr_context.cpp index f34aabbfcc..bd8b9939a8 100644 --- a/be/src/vec/exprs/vexpr_context.cpp +++ b/be/src/vec/exprs/vexpr_context.cpp @@ -49,7 +49,8 @@ VExprContext::VExprContext(VExpr* expr) VExprContext::~VExprContext() { // Do not delete this code, this code here is used to check if forget to close the opened context // Or there will be memory leak - DCHECK(!_prepared || _closed) << get_stack_trace(); + DCHECK(!_prepared || _closed) << get_stack_trace() << " prepare:" << _prepared + << " closed:" << _closed << " expr:" << _root->debug_string(); } doris::Status VExprContext::execute(doris::vectorized::Block* block, int* result_column_id) {