Ensure to hold an exclusive lock while reindexing a relation.

This is mainly to help developers to understand the code.
This commit is contained in:
Hiroshi Inoue 2001-08-17 23:50:00 +00:00
parent 9df188bc0d
commit 58d4f951ea
1 changed files with 11 additions and 3 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.159 2001/08/10 18:57:33 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.160 2001/08/17 23:50:00 inoue Exp $
*
*
* INTERFACE ROUTINES
@ -2016,11 +2016,16 @@ reindex_relation(Oid relid, bool force)
if (IsIgnoringSystemIndexes())
upd_pg_class_inplace = true;
/*
* Ensure to hold an exclusive lock throughout the
* transaction. The lock could be less intensive
* but now it's AccessExclusiveLock for simplicity.
*/
rel = heap_open(relid, AccessExclusiveLock);
/*
* ignore the indexes of the target system relation while processing
* reindex.
*/
rel = RelationIdGetRelation(relid);
if (!IsIgnoringSystemIndexes() && IsSystemRelationName(NameStr(rel->rd_rel->relname)))
deactivate_needed = true;
#ifndef ENABLE_REINDEX_NAILED_RELATIONS
@ -2055,7 +2060,10 @@ reindex_relation(Oid relid, bool force)
else
elog(ERROR, "the target relation %u is shared", relid);
}
RelationClose(rel);
/*
* Continue to hold the lock.
*/
heap_close(rel, NoLock);
old = SetReindexProcessing(true);
if (deactivate_needed)