fix-inval-build-race-v1.patch
text/plain
Filename: fix-inval-build-race-v1.patch
Type: text/plain
Part: 0
Patch
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/utils/cache/inval.c | 1 | 1 |
Author: Noah Misch <noah@leadboat.com>
Commit: Noah Misch <noah@leadboat.com>
Fix back-patch of "Avoid race in RelationBuildDesc() ..."
The back-patch of commit fdd965d074d46765c295223b119ca437dbcac973 broke
CLOBBER_CACHE_ALWAYS for v9.6 through v13, because it updated the
InvalidateSystemCaches() call pertaining to CLOBBER_CACHE_RECURSIVELY
and not also the one pertaining to CLOBBER_CACHE_ALWAYS. Back-patch to
v13, v12, v11, and v10.
Reported by Tomas Vondra. Reviewed by FIXME.
Discussion: https://postgr.es/m/df7b4c0b-7d92-f03f-75c4-9e08b269a716@enterprisedb.com
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index 8b0503f..8fe1f0d 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -715,27 +715,27 @@ AcceptInvalidationMessages(void)
* slows things by at least a factor of 10000, so I wouldn't suggest
* trying to run the entire regression tests that way. It's useful to try
* a few simple tests, to make sure that cache reload isn't subject to
* internal cache-flush hazards, but after you've done a few thousand
* recursive reloads it's unlikely you'll learn more.
*/
#if defined(CLOBBER_CACHE_ALWAYS)
{
static bool in_recursion = false;
if (!in_recursion)
{
in_recursion = true;
- InvalidateSystemCaches();
+ InvalidateSystemCachesExtended(true);
in_recursion = false;
}
}
#elif defined(CLOBBER_CACHE_RECURSIVELY)
{
static int recursion_depth = 0;
/* Maximum depth is arbitrary depending on your threshold of pain */
if (recursion_depth < 3)
{
recursion_depth++;
InvalidateSystemCachesExtended(true);
recursion_depth--;