Limit depth of forced recursion for CLOBBER_CACHE_RECURSIVELY.
authorTom Lane
Fri, 7 Sep 2018 22:13:29 +0000 (18:13 -0400)
committerTom Lane
Fri, 7 Sep 2018 22:14:37 +0000 (18:14 -0400)
It's somewhat surprising that we got away with this before.  (Actually,
since nobody tests this routinely AFAIK, it might've been broken for
awhile.  But it's definitely broken in the wake of commit f868a8143.)
It seems sufficient to limit the forced recursion to a small number
of levels.

Back-patch to all supported branches, like the preceding patch.

Discussion: https://postgr.es/m/12259.1532117714@sss.pgh.pa.us

src/backend/utils/cache/inval.c

index e162f61f736a7a2e007353e1bbfc226d078cf4f7..38119afcb8ddc92199338b1c52a916daacb5de06 100644 (file)
@@ -698,7 +698,17 @@ AcceptInvalidationMessages(void)
        }
    }
 #elif defined(CLOBBER_CACHE_RECURSIVELY)
-   InvalidateSystemCaches();
+   {
+       static int  recursion_depth = 0;
+
+       /* Maximum depth is arbitrary depending on your threshold of pain */
+       if (recursion_depth < 3)
+       {
+           recursion_depth++;
+           InvalidateSystemCaches();
+           recursion_depth--;
+       }
+   }
 #endif
 }