From d68413c2e3bbfcf028ce5aa7307225eecfd1e4c2 Mon Sep 17 00:00:00 2001 From: yishenglanlingzui <395329313@qq.com> Date: Mon, 2 Dec 2024 11:15:09 +0000 Subject: [PATCH] The PDML operator does not call the member's destructor, resulting in the operator's member RtDef not being destructed, causing a memory leak --- src/sql/engine/pdml/static/ob_px_multi_part_delete_op.h | 6 ++++++ src/sql/engine/pdml/static/ob_px_multi_part_insert_op.h | 6 ++++++ src/sql/engine/pdml/static/ob_px_multi_part_update_op.h | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/src/sql/engine/pdml/static/ob_px_multi_part_delete_op.h b/src/sql/engine/pdml/static/ob_px_multi_part_delete_op.h index 501a67c91..3fad08d36 100644 --- a/src/sql/engine/pdml/static/ob_px_multi_part_delete_op.h +++ b/src/sql/engine/pdml/static/ob_px_multi_part_delete_op.h @@ -107,6 +107,12 @@ public: virtual int inner_get_next_row(); virtual int inner_open(); virtual int inner_close(); + virtual void destroy() + { + // destroy + del_rtdef_.~ObDelRtDef(); + ObTableModifyOp::destroy(); + } private: ObPDMLOpDataDriver data_driver_; ObDelRtDef del_rtdef_; diff --git a/src/sql/engine/pdml/static/ob_px_multi_part_insert_op.h b/src/sql/engine/pdml/static/ob_px_multi_part_insert_op.h index 9c4835192..459d2d4d7 100644 --- a/src/sql/engine/pdml/static/ob_px_multi_part_insert_op.h +++ b/src/sql/engine/pdml/static/ob_px_multi_part_insert_op.h @@ -104,6 +104,12 @@ public: virtual int inner_get_next_row(); virtual int inner_open(); virtual int inner_close(); + virtual void destroy() + { + // destroy + ins_rtdef_.~ObInsRtDef(); + ObTableModifyOp::destroy(); + } protected: ObPDMLOpDataDriver data_driver_; ObInsRtDef ins_rtdef_; diff --git a/src/sql/engine/pdml/static/ob_px_multi_part_update_op.h b/src/sql/engine/pdml/static/ob_px_multi_part_update_op.h index d6cd4cbed..65c9b2795 100644 --- a/src/sql/engine/pdml/static/ob_px_multi_part_update_op.h +++ b/src/sql/engine/pdml/static/ob_px_multi_part_update_op.h @@ -89,6 +89,12 @@ public: virtual int inner_get_next_row(); virtual int inner_open(); virtual int inner_close(); + virtual void destroy() + { + // destroy + upd_rtdef_.~ObUpdRtDef(); + ObTableModifyOp::destroy(); + } private: int update_row_to_das(const ObDASTabletLoc *tablet_loc); private: