aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-05-29 05:55:13 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-05-29 05:55:13 +0000
commit41accb0e1a152135397fcaa984fcb5e34af5a06d (patch)
treedd5eeef1c8a6c81e0095172b1a7c3860bf9b4198 /src
parentf54b95655e1b920820e10377fc955b957439198a (diff)
downloadpostgresql-41accb0e1a152135397fcaa984fcb5e34af5a06d.tar.gz
postgresql-41accb0e1a152135397fcaa984fcb5e34af5a06d.zip
Fix another place that assumed 'x = lcons(y, z)' would not have any
side-effect on the original list z. I fear we have a few more of these to track down yet :-(.
Diffstat (limited to 'src')
-rw-r--r--src/backend/rewrite/rewriteHandler.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index 9ac665449ce..cc1c454c96f 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/rewrite/rewriteHandler.c,v 1.136 2004/05/26 04:41:33 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/rewrite/rewriteHandler.c,v 1.137 2004/05/29 05:55:13 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -864,7 +864,6 @@ fireRIRrules(Query *parsetree, List *activeRIRs)
*/
if (locks != NIL)
{
- List *newActiveRIRs;
ListCell *l;
if (oidMember(RelationGetRelid(rel), activeRIRs))
@@ -872,7 +871,7 @@ fireRIRrules(Query *parsetree, List *activeRIRs)
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
errmsg("infinite recursion detected in rules for relation \"%s\"",
RelationGetRelationName(rel))));
- newActiveRIRs = lconso(RelationGetRelid(rel), activeRIRs);
+ activeRIRs = lconso(RelationGetRelid(rel), activeRIRs);
foreach(l, locks)
{
@@ -884,8 +883,10 @@ fireRIRrules(Query *parsetree, List *activeRIRs)
rule->attrno == -1,
rel,
relIsUsed,
- newActiveRIRs);
+ activeRIRs);
}
+
+ activeRIRs = list_delete_first(activeRIRs);
}
heap_close(rel, NoLock);