postgres.git / summary / log / commit / refs

commit    7adc408f4b64db1c9244dc48d40b87ba8be9df9a
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 9b81874ce19..521e5d238f1 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -1486,7 +1486,7 @@ static void SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn) { Size needed_length; - SnapBuildOnDisk *ondisk; + SnapBuildOnDisk *ondisk = NULL; char *ondisk_c; int fd; char tmppath[MAXPGPATH]; @@ -1681,6 +1681,9 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn) out: ReorderBufferSetRestartPoint(builder->reorder, builder->last_serialized_snapshot); + /* be tidy */ + if (ondisk) + pfree(ondisk); } /* [parent: 9f15188a1b82]