postgres.git / summary / log / commit / refs

commit    35e39610a3f83e0464cb2ff2b1e4c282d323b602
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Fri Sep 07 22:13:29 2018 +0000
First released in: 12.0, 9.3.25, 9.4.20, 9.5.15, 9.6.11, 10.6, 11.0

    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


src/backend/utils/cache/inval.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index e162f61f736..38119afcb8d 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -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 } [parent: bf919387ecc6]