summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2018-09-07 18:13:29 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2018-09-07 18:14:24 -0400
commit2ef5c12ad5b613fd4f4755122aa837689f7c5fd5 (patch)
tree0ad956ee89ecba4e097e49c94ef1927e24124f76
parent395f310b04c59250e58d131cc00c7cbf80e94198 (diff)
Limit depth of forced recursion for CLOBBER_CACHE_RECURSIVELY.
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
-rw-r--r--src/backend/utils/cache/inval.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index f0c26120873..ca283f82d2e 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -699,7 +699,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
}