Fix plancache's invalidation callback to do the right thing for a SI
authorTom Lane
Mon, 26 Mar 2007 00:36:19 +0000 (00:36 +0000)
committerTom Lane
Mon, 26 Mar 2007 00:36:19 +0000 (00:36 +0000)
reset event, namely invalidate everything.  This oversight probably
explains the rare failures that some buildfarm machines have been
showing for the plancache regression test.

src/backend/utils/cache/plancache.c

index 4ff2f745c316944c2efa75284703234055ecf9d7..f02a58e29b11b9113d69cf6b7b5462e027600504 100644 (file)
@@ -33,7 +33,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/cache/plancache.c,v 1.4 2007/03/23 19:53:51 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/cache/plancache.c,v 1.5 2007/03/26 00:36:19 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -812,6 +812,9 @@ PlanCacheComputeResultDesc(List *stmt_list)
 /*
  * PlanCacheCallback
  *     Relcache inval callback function
+ *
+ * Invalidate all plans mentioning the given rel, or all plans mentioning
+ * any rel at all if relid == InvalidOid.
  */
 static void
 PlanCacheCallback(Datum arg, Oid relid)
@@ -843,7 +846,7 @@ PlanCacheCallback(Datum arg, Oid relid)
 
                    if (rte->rtekind != RTE_RELATION)
                        continue;
-                   if (relid == rte->relid)
+                   if (relid == rte->relid || relid == InvalidOid)
                    {
                        /* Invalidate the plan! */
                        plan->dead = true;
@@ -883,10 +886,11 @@ PlanCacheCallback(Datum arg, Oid relid)
 static void
 InvalRelid(Oid relid, LOCKMODE lockmode, InvalRelidContext *context)
 {
-   if (relid == context->inval_relid)
+   if (relid == context->inval_relid || context->inval_relid == InvalidOid)
        context->plan->dead = true;
 }
 
+
 /*
  * HaveCachedPlans 
  *     Check if the plancache has stored any plans at all.
@@ -896,4 +900,3 @@ HaveCachedPlans(void)
 {
    return (cached_plans_list != NIL);
 }
-