From: Hiroshi Inoue Date: Fri, 17 Aug 2001 23:50:00 +0000 (+0000) Subject: Ensure to hold an exclusive lock while reindexing a relation. X-Git-Tag: REL7_2_BETA1~675 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=58d4f951ea193db219e9da66e07c73b8aa3f06db;p=postgresql Ensure to hold an exclusive lock while reindexing a relation. This is mainly to help developers to understand the code. --- diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index d3f866236f..4dbc1648c1 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -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)