Fix another place that assumed 'x = lcons(y, z)' would not have any
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 29 May 2004 05:55:13 +0000 (05:55 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 29 May 2004 05:55:13 +0000 (05:55 +0000)
side-effect on the original list z.  I fear we have a few more of these
to track down yet :-(.

src/backend/rewrite/rewriteHandler.c

index 9ac665449ce2647d3e95b6aa376512df4103babb..cc1c454c96f5084dc7574774e02ca3e6d838df02 100644 (file)
@@ -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);