From c064eb597c723309e8f318f8dfe2fc86a72a1288 Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 27 Dec 2022 06:38:05 +0000 Subject: [PATCH] [CP] [to #46475366] fix memory leak of udf`s collection result --- src/sql/engine/expr/ob_expr_udf.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sql/engine/expr/ob_expr_udf.cpp b/src/sql/engine/expr/ob_expr_udf.cpp index 3619f15ff..1bc6ca611 100644 --- a/src/sql/engine/expr/ob_expr_udf.cpp +++ b/src/sql/engine/expr/ob_expr_udf.cpp @@ -514,10 +514,13 @@ int ObExprUDF::eval_udf(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &res) } else if (info->is_called_in_sql_) { if (tmp_result.is_pl_extend()) { OZ (pl::ObUserDefinedType::deep_copy_obj(alloc, tmp_result, result, true)); + OZ (pl::ObUserDefinedType::destruct_obj(tmp_result, ctx.exec_ctx_.get_my_session())); + CK (OB_NOT_NULL(ctx.exec_ctx_.get_pl_ctx())); + OX (ctx.exec_ctx_.get_pl_ctx()->reset_obj()); + OZ (ctx.exec_ctx_.get_pl_ctx()->add(result)); } else { OZ (deep_copy_obj(alloc, tmp_result, result)); } - OX (ctx.exec_ctx_.get_pl_ctx()->reset_obj()); } else { result = tmp_result; }