Re: A potential memory leak on Merge Join when Sort node is not below Materialize node - Mailing list pgsql-hackers

From Tom Lane
Subject Re: A potential memory leak on Merge Join when Sort node is not below Materialize node
Date
Msg-id 4016980.1664386555@sss.pgh.pa.us
Whole thread Raw
In response to A potential memory leak on Merge Join when Sort node is not below Materialize node  (Önder Kalacı <onderkalaci@gmail.com>)
Responses Re: A potential memory leak on Merge Join when Sort node is not below Materialize node
List pgsql-hackers
=?UTF-8?B?w5ZuZGVyIEthbGFjxLE=?= <onderkalaci@gmail.com> writes:
> With PG 15 (rc1 or beta4), I'm observing an interesting memory pattern.

Yup, that is a leak.  valgrind'ing it blames this call chain:

==00:00:16:12.228 4011013== 790,404,056 bytes in 60,800,312 blocks are definitely lost in loss record 1,108 of 1,108
==00:00:16:12.228 4011013==    at 0x9A5104: palloc (mcxt.c:1170)
==00:00:16:12.228 4011013==    by 0x89F8D9: datumCopy (datum.c:175)
==00:00:16:12.228 4011013==    by 0x9B5BEE: tuplesort_getdatum (tuplesortvariants.c:882)
==00:00:16:12.228 4011013==    by 0x6FA8B3: ExecSort (nodeSort.c:200)
==00:00:16:12.228 4011013==    by 0x6F1E87: ExecProcNode (executor.h:259)
==00:00:16:12.228 4011013==    by 0x6F1E87: ExecMergeJoin (nodeMergejoin.c:871)
==00:00:16:12.228 4011013==    by 0x6D7800: ExecProcNode (executor.h:259)
==00:00:16:12.228 4011013==    by 0x6D7800: fetch_input_tuple (nodeAgg.c:562)
==00:00:16:12.228 4011013==    by 0x6DAE2E: agg_retrieve_direct (nodeAgg.c:2454)
==00:00:16:12.228 4011013==    by 0x6DAE2E: ExecAgg (nodeAgg.c:2174)
==00:00:16:12.228 4011013==    by 0x6C6122: ExecProcNode (executor.h:259)
==00:00:16:12.228 4011013==    by 0x6C6122: ExecutePlan (execMain.c:1636)

and bisecting fingers this commit as the guilty party:

commit 91e9e89dccdfdf4216953d3d8f5515dcdef177fb
Author: David Rowley <drowley@postgresql.org>
Date:   Thu Jul 22 14:03:19 2021 +1200

    Make nodeSort.c use Datum sorts for single column sorts

Looks like that forgot that tuplesort_getdatum()'s result has to
be freed by the caller.

            regards, tom lane



pgsql-hackers by date:

Previous
From: Ranier Vilela
Date:
Subject: Re: A potential memory leak on Merge Join when Sort node is not below Materialize node
Next
From: Bruce Momjian
Date:
Subject: Re: Adding CommandID to heap xlog records