postgres.git / summary / log / commit / refs
commit 034fffbf31be42c789f4a5fbe2edb62e4b07fa9c
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun Jan 31 18:15:39 2010 +0000
First released in: 9.0.0
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
src/backend/commands/copy.c | 4 +++-
src/backend/executor/nodeModifyTable.c | 6 +++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index b7e1a175b53..cfaa3927bc7 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.321 2010/01/15 09:19:01 heikki Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.322 2010/01/31 18:15:39 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -2172,6 +2172,8 @@ CopyFrom(CopyState cstate)
ExecARInsertTriggers(estate, resultRelInfo, tuple,
recheckIndexes);
+ list_free(recheckIndexes);
+
/*
* We count only tuples not suppressed by a BEFORE INSERT trigger;
* this is the same definition used by execMain.c for counting
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,
[parent: f13944e9c921]