diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2010-01-31 18:15:39 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2010-01-31 18:15:39 +0000 |
commit | 034fffbf31be42c789f4a5fbe2edb62e4b07fa9c (patch) | |
tree | a8ac5ac4934967184689f135977bef11d6e20e79 /src/backend/executor/nodeModifyTable.c | |
parent | f13944e9c921df2a98bf470d789dfb466135f251 (diff) | |
download | postgresql-034fffbf31be42c789f4a5fbe2edb62e4b07fa9c.tar.gz postgresql-034fffbf31be42c789f4a5fbe2edb62e4b07fa9c.zip |
Fix memory leak created by deferrable-index-constraints patches.
We need to free the OID list returned by ExecInsertIndexTuples to avoid
a query-lifespan memory leak. When many rows require rechecking, this
can be a significant leak --- it's even more than the space used for the
queued trigger events.
Dean Rasheed
Diffstat (limited to 'src/backend/executor/nodeModifyTable.c')
-rw-r--r-- | src/backend/executor/nodeModifyTable.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 170dda31373..cad08fa8f72 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/nodeModifyTable.c,v 1.4 2010/01/02 16:57:44 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/executor/nodeModifyTable.c,v 1.5 2010/01/31 18:15:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -254,6 +254,8 @@ ExecInsert(TupleTableSlot *slot, /* AFTER ROW INSERT Triggers */ ExecARInsertTriggers(estate, resultRelInfo, tuple, recheckIndexes); + list_free(recheckIndexes); + /* Process RETURNING if present */ if (resultRelInfo->ri_projectReturning) return ExecProcessReturning(resultRelInfo->ri_projectReturning, @@ -570,6 +572,8 @@ lreplace:; ExecARUpdateTriggers(estate, resultRelInfo, tupleid, tuple, recheckIndexes); + list_free(recheckIndexes); + /* Process RETURNING if present */ if (resultRelInfo->ri_projectReturning) return ExecProcessReturning(resultRelInfo->ri_projectReturning, |