]> granicus.if.org Git - postgresql/commitdiff
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);