v2-0001-Fix-memory-leak-in-pgoutput-with-publication-list.patch
text/x-diff
Filename: v2-0001-Fix-memory-leak-in-pgoutput-with-publication-list.patch
Type: text/x-diff
Part: 0
Patch
Format: format-patch
Series: patch v2-0001
Subject: Fix memory leak in pgoutput with publication list cache
| File | + | − |
|---|---|---|
| src/backend/replication/pgoutput/pgoutput.c | 15 | 7 |
From 22795bd2c7a8c7934d4ac77cfe1cd2ef36ae9fd3 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Mon, 2 Dec 2024 09:50:01 +0900
Subject: [PATCH v2 1/2] Fix memory leak in pgoutput with publication list
cache
Blah.
Analyzed-by: Jeff Davis, Michael Paquier
Author: Alvaro Herrera
Discussion: https://postgr.es/m/Z0khf9EVMVLOc_YY@paquier.xyz
Backpatch-through: 13
---
src/backend/replication/pgoutput/pgoutput.c | 22 ++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c
index 5e23453f07..41d204ac3b 100644
--- a/src/backend/replication/pgoutput/pgoutput.c
+++ b/src/backend/replication/pgoutput/pgoutput.c
@@ -2060,15 +2060,23 @@ get_rel_sync_entry(PGOutputData *data, Relation relation)
char relkind = get_rel_relkind(relid);
List *rel_publications = NIL;
- /* Reload publications if needed before use. */
+ /*
+ * Reload publications if needed before use. A dedicated memory
+ * context is used to hold the publication information, so as any
+ * memory allocated within LoadPublications() is freed.
+ */
if (!publications_valid)
{
- oldctx = MemoryContextSwitchTo(CacheMemoryContext);
- if (data->publications)
- {
- list_free_deep(data->publications);
- data->publications = NIL;
- }
+ static MemoryContext pubmemcxt = NULL;
+
+ if (pubmemcxt == NULL)
+ pubmemcxt = AllocSetContextCreate(CacheMemoryContext,
+ "publication list context",
+ ALLOCSET_DEFAULT_SIZES);
+ else
+ MemoryContextReset(pubmemcxt);
+ oldctx = MemoryContextSwitchTo(pubmemcxt);
+
data->publications = LoadPublications(data->publication_names);
MemoryContextSwitchTo(oldctx);
publications_valid = true;
--
2.45.2