Skip to content

Commit 034fffb

Browse files
committed
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
1 parent f13944e commit 034fffb

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/backend/commands/copy.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.321 2010/01/15 09:19:01 heikki Exp $
11+
* $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.322 2010/01/31 18:15:39 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -2172,6 +2172,8 @@ CopyFrom(CopyState cstate)
21722172
ExecARInsertTriggers(estate, resultRelInfo, tuple,
21732173
recheckIndexes);
21742174

2175+
list_free(recheckIndexes);
2176+
21752177
/*
21762178
* We count only tuples not suppressed by a BEFORE INSERT trigger;
21772179
* this is the same definition used by execMain.c for counting

src/backend/executor/nodeModifyTable.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/executor/nodeModifyTable.c,v 1.4 2010/01/02 16:57:44 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/executor/nodeModifyTable.c,v 1.5 2010/01/31 18:15:39 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -254,6 +254,8 @@ ExecInsert(TupleTableSlot *slot,
254254
/* AFTER ROW INSERT Triggers */
255255
ExecARInsertTriggers(estate, resultRelInfo, tuple, recheckIndexes);
256256

257+
list_free(recheckIndexes);
258+
257259
/* Process RETURNING if present */
258260
if (resultRelInfo->ri_projectReturning)
259261
return ExecProcessReturning(resultRelInfo->ri_projectReturning,
@@ -570,6 +572,8 @@ lreplace:;
570572
ExecARUpdateTriggers(estate, resultRelInfo, tupleid, tuple,
571573
recheckIndexes);
572574

575+
list_free(recheckIndexes);
576+
573577
/* Process RETURNING if present */
574578
if (resultRelInfo->ri_projectReturning)
575579
return ExecProcessReturning(resultRelInfo->ri_projectReturning,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy