aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeModifyTable.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-01-31 18:15:39 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-01-31 18:15:39 +0000
commit034fffbf31be42c789f4a5fbe2edb62e4b07fa9c (patch)
treea8ac5ac4934967184689f135977bef11d6e20e79 /src/backend/executor/nodeModifyTable.c
parentf13944e9c921df2a98bf470d789dfb466135f251 (diff)
downloadpostgresql-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.c6
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,