aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-03-05 17:01:33 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-03-05 17:01:33 +0000
commit9436257b411058f4e73b4f780c5bfe831e5a5d7e (patch)
tree2f2bc01a59f65e9aad13aaacbccacec67836a672 /src/backend/utils
parent0f8a34a73052950eb434618cef8d61f0ffef8b9e (diff)
downloadpostgresql-9436257b411058f4e73b4f780c5bfe831e5a5d7e.tar.gz
postgresql-9436257b411058f4e73b4f780c5bfe831e5a5d7e.zip
In PrepareToInvalidateCacheTuple, don't force initialization of catalog
caches that we don't actually need to touch. This saves some trivial number of cycles and avoids certain cases of deadlock when doing concurrent VACUUM FULL on system catalogs. Per report from Gavin Roy. Backpatch to 8.2. In earlier versions, CatalogCacheInitializeCache didn't lock the relation so there's no deadlock risk (though that certainly had plenty of risks of its own).
Diffstat (limited to 'src/backend/utils')
-rw-r--r--src/backend/utils/cache/catcache.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index f36384510c9..f082445caf7 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/cache/catcache.c,v 1.140 2008/01/01 19:45:53 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/cache/catcache.c,v 1.140.2.1 2008/03/05 17:01:33 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1781,13 +1781,13 @@ PrepareToInvalidateCacheTuple(Relation relation,
for (ccp = CacheHdr->ch_caches; ccp; ccp = ccp->cc_next)
{
+ if (ccp->cc_reloid != reloid)
+ continue;
+
/* Just in case cache hasn't finished initialization yet... */
if (ccp->cc_tupdesc == NULL)
CatalogCacheInitializeCache(ccp);
- if (ccp->cc_reloid != reloid)
- continue;
-
(*function) (ccp->id,
CatalogCacheComputeTupleHashValue(ccp, tuple),
&tuple->t_self,