pgsql: Repair memory leaks in plpython.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Repair memory leaks in plpython.
Date: 2025-01-11 16:46:22
Message-ID: E1tWecw-0011G9-Ap@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Repair memory leaks in plpython.

PLy_spi_execute_plan (PLyPlan.execute) and PLy_cursor_plan
(plpy.cursor) use PLy_output_convert to convert Python values
into Datums that can be passed to the query-to-execute. But they
failed to pay much attention to its warning that it can leave "cruft
generated along the way" behind. Repeated use of these methods can
result in a substantial memory leak for the duration of the calling
plpython function.

To fix, make a temporary memory context to invoke PLy_output_convert
in. This also lets us get rid of the rather fragile code that was
here for retail pfree's of the converted Datums. Indeed, we don't
need the PLyPlanObject.values field anymore at all, though I left it
in place in the back branches in the name of ABI stability.

Mat Arye and Tom Lane, per report from Mat Arye. Back-patch to all
supported branches.

Discussion: https://postgr.es/m/CADsUR0DvVgnZYWwnmKRK65MZg7YLUSTDLV61qdnrwtrAJgU6xw@mail.gmail.com

Branch
------
REL_17_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/e98df02df3f2463771b0f008832023cc609c49b2

Modified Files
--------------
src/pl/plpython/plpy_cursorobject.c | 52 +++++++++++++++------------------
src/pl/plpython/plpy_spi.c | 58 ++++++++++++++++---------------------
2 files changed, 49 insertions(+), 61 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Dean Rasheed 2025-01-12 13:05:51 pgsql: Fix XMLTABLE() deparsing to quote namespace names if necessary.
Previous Message Alvaro Herrera 2025-01-11 13:14:05 Re: pgsql: TupleHashTable: store additional data along with tuple.