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:12:59 +0530
commitf2b268ee0626286d15a1eaa78fe1704811d51cd4 (patch)
treee6b5b45f8b9dc61f93dbf61f5c34b16fb444028c
parent594a7dcd674cdc1596d74edca1b80c41679ab499 (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 cdc117763cb..bba558705d1 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -1464,7 +1464,7 @@ static void
SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
{
Size needed_length;
- SnapBuildOnDisk *ondisk;
+ SnapBuildOnDisk *ondisk = NULL;
char *ondisk_c;
int fd;
char tmppath[MAXPGPATH];
@@ -1656,6 +1656,9 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
out:
ReorderBufferSetRestartPoint(builder->reorder,
builder->last_serialized_snapshot);
+ /* be tidy */
+ if (ondisk)
+ pfree(ondisk);
}
/*