From 3d0dcea619b72a2409bb6747ded5a16f7428631d Mon Sep 17 00:00:00 2001
From: Jingtang Zhang <mrdrivingduck@gmail.com>
Date: Fri, 15 Aug 2025 18:11:02 +0800
Subject: [PATCH] Fix SMgrRelation object memory leak in DropRelationFiles

to be done
---
 src/backend/storage/smgr/md.c   | 2 +-
 src/backend/storage/smgr/smgr.c | 3 +--
 src/include/storage/smgr.h      | 1 +
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
index 2ccb0faceb5..f9d65cb5b65 100644
--- a/src/backend/storage/smgr/md.c
+++ b/src/backend/storage/smgr/md.c
@@ -1607,7 +1607,7 @@ DropRelationFiles(RelFileLocator *delrels, int ndelrels, bool isRedo)
 	smgrdounlinkall(srels, ndelrels, isRedo);
 
 	for (i = 0; i < ndelrels; i++)
-		smgrclose(srels[i]);
+		smgrdestroy(srels[i]);
 	pfree(srels);
 }
 
diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c
index bce37a36d51..a646c2ef725 100644
--- a/src/backend/storage/smgr/smgr.c
+++ b/src/backend/storage/smgr/smgr.c
@@ -163,7 +163,6 @@ static dlist_head unpinned_relns;
 
 /* local function prototypes */
 static void smgrshutdown(int code, Datum arg);
-static void smgrdestroy(SMgrRelation reln);
 
 static void smgr_aio_reopen(PgAioHandle *ioh);
 static char *smgr_aio_describe_identity(const PgAioTargetData *sd);
@@ -319,7 +318,7 @@ smgrunpin(SMgrRelation reln)
 /*
  * smgrdestroy() -- Delete an SMgrRelation object.
  */
-static void
+void
 smgrdestroy(SMgrRelation reln)
 {
 	ForkNumber	forknum;
diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h
index 3964d9334b3..3b07b3ceea1 100644
--- a/src/include/storage/smgr.h
+++ b/src/include/storage/smgr.h
@@ -82,6 +82,7 @@ extern bool smgrexists(SMgrRelation reln, ForkNumber forknum);
 extern void smgrpin(SMgrRelation reln);
 extern void smgrunpin(SMgrRelation reln);
 extern void smgrclose(SMgrRelation reln);
+extern void smgrdestroy(SMgrRelation reln);
 extern void smgrdestroyall(void);
 extern void smgrrelease(SMgrRelation reln);
 extern void smgrreleaseall(void);
-- 
2.39.3

