aboutsummaryrefslogtreecommitdiff
path: root/src
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 08:40:06 +0530
commit0b2ae3c928b2926fafa1c423b07b949a4c3bc402 (patch)
tree15892a7c26b9e3f83ee15841b25e999eeac3f517 /src
parent436d9c5cabfcc3ffe83453b85299044f3aa0d86e (diff)
downloadpostgresql-0b2ae3c928b2926fafa1c423b07b949a4c3bc402.tar.gz
postgresql-0b2ae3c928b2926fafa1c423b07b949a4c3bc402.zip
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
Diffstat (limited to 'src')
-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 3e9d4cd79f9..4ec0003550e 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -1485,7 +1485,7 @@ static void
SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
{
Size needed_length;
- SnapBuildOnDisk *ondisk;
+ SnapBuildOnDisk *ondisk = NULL;
char *ondisk_c;
int fd;
char tmppath[MAXPGPATH];
@@ -1684,6 +1684,9 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
out:
ReorderBufferSetRestartPoint(builder->reorder,
builder->last_serialized_snapshot);
+ /* be tidy */
+ if (ondisk)
+ pfree(ondisk);
}
/*