This is an automated email from the ASF dual-hosted git repository.

yjhjstz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git


The following commit(s) were added to refs/heads/main by this push:
     new 770364780f4 ORCA: Fix memory leak in CWindowOids by adding destructor 
(#1533)
770364780f4 is described below

commit 770364780f48800c23c79dae3825295b3e7eed0b
Author: Jianghua.yjh <[email protected]>
AuthorDate: Wed Jan 21 23:27:38 2026 +0800

    ORCA: Fix memory leak in CWindowOids by adding destructor (#1533)
    
    * ORCA: Fix memory leak in CWindowOids by adding destructor
    
    CWindowOids class was leaking three CMDIdGPDB objects (m_MDIdRowNumber,
    m_MDIdRank, m_MDDenseRank) that were allocated in the constructor but
    never released.
    
    Fixes ORCA unit test failures:
      - gporca_test_CXformTest
      - gporca_test_CConstExprEvaluatorDefaultTest
---
 src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h | 2 ++
 src/backend/gporca/libgpopt/src/base/CWindowOids.cpp         | 7 +++++++
 2 files changed, 9 insertions(+)

diff --git a/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h 
b/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h
index ba120eac015..6d20b4948c2 100644
--- a/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h
+++ b/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h
@@ -60,6 +60,8 @@ public:
        CWindowOids(CMemoryPool *mp, OID row_number_oid, OID rank_oid,
                                OID dense_rank_oid);
 
+       ~CWindowOids() override;
+
        // accessor of oid value of "row_number" function
        OID OidRowNumber() const;
        IMDId *MDIdRowNumber() const;
diff --git a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp 
b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp
index da744a018d9..e2f326d3aaf 100644
--- a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp
+++ b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp
@@ -18,6 +18,13 @@ CWindowOids::CWindowOids(CMemoryPool *mp, OID 
row_number_oid, OID rank_oid,
        m_MDDenseRank = GPOS_NEW(mp) CMDIdGPDB(IMDId::EmdidGeneral, 
m_oidDenseRank);
 }
 
+CWindowOids::~CWindowOids()
+{
+       CRefCount::SafeRelease(m_MDIdRowNumber);
+       CRefCount::SafeRelease(m_MDIdRank);
+       CRefCount::SafeRelease(m_MDDenseRank);
+}
+
 OID
 CWindowOids::OidRowNumber() const
 {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to