summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmit Kapila <akapila@postgresql.org>2021-01-13 08:31:45 +0530
committerAmit Kapila <akapila@postgresql.org>2021-01-13 09:22:03 +0530
commit4bccceaa9179bffbe3469909e28ce4ded34f0a09 (patch)
tree2667024bbd7fe9e4a18a31d458cb5d8a37d3dbfd
parenta8bb366ad0e5c422622ee00d5e3105f8451deb62 (diff)
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
-rw-r--r--src/backend/replication/logical/snapbuild.c5
1 files changed, 4 insertions, 1 deletions
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);
}
/*