summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/commands/vacuumlazy.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c
index 62ba05f9698..ff78ea00d1c 100644
--- a/src/backend/commands/vacuumlazy.c
+++ b/src/backend/commands/vacuumlazy.c
@@ -31,7 +31,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.47 2004/10/15 22:39:56 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.48 2004/10/25 15:42:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -554,9 +554,12 @@ lazy_scan_index(Relation indrel, LVRelStats *vacrelstats)
vac_init_rusage(&ru0);
/*
- * If index is unsafe for concurrent access, must lock it.
+ * Acquire appropriate type of lock on index: must be exclusive if
+ * index AM isn't concurrent-safe.
*/
- if (!indrel->rd_am->amconcurrent)
+ if (indrel->rd_am->amconcurrent)
+ LockRelation(indrel, RowExclusiveLock);
+ else
LockRelation(indrel, AccessExclusiveLock);
/*
@@ -576,7 +579,9 @@ lazy_scan_index(Relation indrel, LVRelStats *vacrelstats)
/*
* Release lock acquired above.
*/
- if (!indrel->rd_am->amconcurrent)
+ if (indrel->rd_am->amconcurrent)
+ UnlockRelation(indrel, RowExclusiveLock);
+ else
UnlockRelation(indrel, AccessExclusiveLock);
if (!stats)
@@ -619,9 +624,12 @@ lazy_vacuum_index(Relation indrel, LVRelStats *vacrelstats)
vac_init_rusage(&ru0);
/*
- * If index is unsafe for concurrent access, must lock it.
+ * Acquire appropriate type of lock on index: must be exclusive if
+ * index AM isn't concurrent-safe.
*/
- if (!indrel->rd_am->amconcurrent)
+ if (indrel->rd_am->amconcurrent)
+ LockRelation(indrel, RowExclusiveLock);
+ else
LockRelation(indrel, AccessExclusiveLock);
/* Do bulk deletion */
@@ -636,7 +644,9 @@ lazy_vacuum_index(Relation indrel, LVRelStats *vacrelstats)
/*
* Release lock acquired above.
*/
- if (!indrel->rd_am->amconcurrent)
+ if (indrel->rd_am->amconcurrent)
+ UnlockRelation(indrel, RowExclusiveLock);
+ else
UnlockRelation(indrel, AccessExclusiveLock);
if (!stats)