From 2ed915ec2653dff6f8e8ddef9793a14744eb6437 Mon Sep 17 00:00:00 2001 From: Shi Yu Date: Wed, 22 Jun 2022 10:03:32 +0800 Subject: [PATCH] Fix memory leak about attrmap When rebuilding the relcache mapping on subscriber, we didn't release the no longer useful attribute mapping's memory which would result in memory leak. Fix it by releasing the no longer useful mapping's memory when rebuilding. Since attribute mappings was refactored on PG13~HEAD, we should use free_attrmap instead of pfree to release its memory on these branches. Fix one place where we still use pfree to release the mapping memory. Author: Hou Zhijie Reviewed-by: Amit Langote, Amit Kapila, Shi yu Backpatch-through: 10, where it was introduced Discussion: https://postgr.es/m/OSZPR01MB6310F46CD425A967E4AEF736FDA49@OSZPR01MB6310.jpnprd01.prod.outlook.com --- src/backend/replication/logical/relation.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index f2258c7667..db1b686fad 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -145,7 +145,7 @@ logicalrep_relmap_free_entry(LogicalRepRelMapEntry *entry) bms_free(remoterel->attkeys); if (entry->attrmap) - pfree(entry->attrmap); + free_attrmap(entry->attrmap); } /* @@ -337,6 +337,13 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) MemoryContext oldctx; int i; + /* Release the no-longer-useful attrmap, if any. */ + if (entry->attrmap) + { + free_attrmap(entry->attrmap); + entry->attrmap = NULL; + } + /* Try to find and lock the relation by name. */ relid = RangeVarGetRelid(makeRangeVar(remoterel->nspname, remoterel->relname, -1), @@ -588,6 +595,13 @@ logicalrep_partition_open(LogicalRepRelMapEntry *root, part_entry->partoid = partOid; } + /* Release the no-longer-useful attrmap, if any. */ + if (entry->attrmap) + { + free_attrmap(entry->attrmap); + entry->attrmap = NULL; + } + if (!entry->remoterel.remoteid) { int i; -- 2.18.4