git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bea449c)
Fix memory leak in SnapBuildSerialize.
2021年1月13日 02:49:50 +0000 (08:19 +0530)
2021年1月13日 02:49:50 +0000 (08:19 +0530)
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


diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index 15b07a54c1172b9606d71e4cf669a30d06f9f77b..71d510e305e142b9e955cc2b5379be3680befed5 100644 (file)
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -1488,7 +1488,7 @@ static void
SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
{
Size needed_length;
- SnapBuildOnDisk *ondisk;
+ SnapBuildOnDisk *ondisk = NULL;
char *ondisk_c;
int fd;
char tmppath[MAXPGPATH];
@@ -1687,6 +1687,9 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
out:
ReorderBufferSetRestartPoint(builder->reorder,
builder->last_serialized_snapshot);
+ /* be tidy */
+ if (ondisk)
+ pfree(ondisk);
}
/*
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /