mirror of
https://github.com/postgres/postgres.git
synced 2026-04-25 16:18:21 -04:00
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).
This commit is contained in:
parent
0f8a34a730
commit
9436257b41
1 changed files with 4 additions and 4 deletions
8
src/backend/utils/cache/catcache.c
vendored
8
src/backend/utils/cache/catcache.c
vendored
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue