From 1da098093612e1102bdfc3d286b16c4bcaf4a200 Mon Sep 17 00:00:00 2001 From: yishenglanlingzui <395329313@qq.com> Date: Mon, 1 Apr 2024 02:56:24 +0000 Subject: [PATCH] fix bug when duplicated_rows is push_back to duplicated_iter_list_ and fails, the memory of duplicated_rows may be leaked. --- src/sql/das/ob_das_insert_op.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/sql/das/ob_das_insert_op.cpp b/src/sql/das/ob_das_insert_op.cpp index 8febae4d56..41a709415e 100644 --- a/src/sql/das/ob_das_insert_op.cpp +++ b/src/sql/das/ob_das_insert_op.cpp @@ -200,6 +200,10 @@ int ObDASInsertOp::insert_row_with_fetch() } } } + if (OB_FAIL(ret) && OB_NOT_NULL(duplicated_rows)) { + ObQueryIteratorFactory::free_insert_dup_iter(duplicated_rows); + duplicated_rows = NULL; + } } ret = OB_ITER_END == ret ? OB_SUCCESS : ret; for (int64_t i = 0; OB_SUCC(ret) && i < related_ctdefs_.count(); ++i) { @@ -258,9 +262,14 @@ int ObDASInsertOp::insert_row_with_fetch() } else { // 需要释放iter的内存, 否则会内存泄漏 ObQueryIteratorFactory::free_insert_dup_iter(duplicated_rows); + duplicated_rows = NULL; } } } + if (OB_FAIL(ret) && OB_NOT_NULL(duplicated_rows)) { + ObQueryIteratorFactory::free_insert_dup_iter(duplicated_rows); + duplicated_rows = NULL; + } } ret = OB_ITER_END == ret ? OB_SUCCESS : ret; }