pgsql: Fix two memory leaks around force-storing tuples in slots.

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix two memory leaks around force-storing tuples in slots.
Date: 2019-04-19 18:55:09
Message-ID: E1hHYfF-0003fw-Uy@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix two memory leaks around force-storing tuples in slots.

As reported by Tom, when ExecStoreMinimalTuple() had to perform a
conversion to store the minimal tuple in the slot, it forgot to
respect the shouldFree flag, and leaked the tuple into the current
memory context if true. Fix that by freeing the tuple in that case.

Looking at the relevant code made me (Andres) realize that not having
the shouldFree parameter to ExecForceStoreHeapTuple() was a bad
idea. Some callers had to locally implement the necessary logic, and
in one case it was missing, creating a potential per-group leak in
non-hashed aggregation.

The choice to not free the tuple in ExecComputeStoredGenerated() is
not pretty, but not introduced by this commit - I'll start a separate
discussion about it.

Reported-By: Tom Lane
Discussion: https://postgr.es/m/366.1555382816@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/88e6ad3054ddd5aa0dee12e5def2c335fe92a414

Modified Files
--------------
contrib/postgres_fdw/postgres_fdw.c | 4 +---
src/backend/commands/trigger.c | 20 ++++++++++----------
src/backend/executor/execTuples.c | 20 ++++++++++++++++++--
src/backend/executor/nodeAgg.c | 2 +-
src/backend/executor/nodeIndexonlyscan.c | 2 +-
src/backend/executor/nodeModifyTable.c | 9 +++++++--
src/include/executor/tuptable.h | 4 +++-
7 files changed, 41 insertions(+), 20 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Stephen Frost 2019-04-20 01:23:13 pgsql: GSSAPI: Improve documentation and tests
Previous Message Tom Lane 2019-04-19 15:20:46 pgsql: Fix problems with auto-held portals.