postgres.git / summary / log / commit / refs
commit 4bccceaa9179bffbe3469909e28ce4ded34f0a09
Author: Amit Kapila <akapila@postgresql.org>
Date: Wed Jan 13 03:01:45 2021 +0000
First released in: 14.0, 9.5.25, 9.6.21, 10.16, 11.11, 12.6, 13.2
Fix memory leak in SnapBuildSerialize.
The memory for the snapshot was leaked while serializing it to disk during
logical decoding. This memory will be freed only once walsender stops
streaming the changes. This can lead to a huge memory increase when master
logs Standby Snapshot too frequently say when the user is trying to create
many replication slots.
Reported-by: funnyxj.fxj@alibaba-inc.com
Diagnosed-by: funnyxj.fxj@alibaba-inc.com
Author: Amit Kapila
Backpatch-through: 9.5
Discussion: https://postgr.es/m/033ab54c-6393-42ee-8ec9-2b399b5d8cde.funnyxj.fxj@alibaba-inc.com
src/backend/replication/logical/snapbuild.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index 7bd4a74225c..56d5f9422ae 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -1447,7 +1447,7 @@ static void
SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
{
Size needed_length;
- SnapBuildOnDisk *ondisk;
+ SnapBuildOnDisk *ondisk = NULL;
char *ondisk_c;
int fd;
char tmppath[MAXPGPATH];
@@ -1639,6 +1639,9 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
out:
ReorderBufferSetRestartPoint(builder->reorder,
builder->last_serialized_snapshot);
+ /* be tidy */
+ if (ondisk)
+ pfree(ondisk);
}
/*
[parent: a8bb366ad0e5]