diff options
Diffstat (limited to 'src/backend/commands/vacuum.c')
-rw-r--r-- | src/backend/commands/vacuum.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 232ec9a89e6..3d0c6e0e996 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.294 2004/10/07 14:19:58 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.295 2004/10/15 22:39:56 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1190,6 +1190,12 @@ scan_heap(VRelStats *vacrelstats, Relation onerel, buf = ReadBuffer(onerel, blkno); page = BufferGetPage(buf); + /* + * We don't bother to do LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE) + * because we assume that holding exclusive lock on the relation + * will keep other backends from looking at the page. + */ + vacpage->blkno = blkno; vacpage->offsets_used = 0; vacpage->offsets_free = 0; @@ -1235,7 +1241,6 @@ scan_heap(VRelStats *vacrelstats, Relation onerel, offnum <= maxoff; offnum = OffsetNumberNext(offnum)) { - uint16 sv_infomask; ItemId itemid = PageGetItemId(page, offnum); bool tupgone = false; @@ -1255,9 +1260,7 @@ scan_heap(VRelStats *vacrelstats, Relation onerel, tuple.t_len = ItemIdGetLength(itemid); ItemPointerSet(&(tuple.t_self), blkno, offnum); - sv_infomask = tuple.t_data->t_infomask; - - switch (HeapTupleSatisfiesVacuum(tuple.t_data, OldestXmin)) + switch (HeapTupleSatisfiesVacuum(tuple.t_data, OldestXmin, buf)) { case HEAPTUPLE_DEAD: tupgone = true; /* we can delete the tuple */ @@ -1348,10 +1351,6 @@ scan_heap(VRelStats *vacrelstats, Relation onerel, break; } - /* check for hint-bit update by HeapTupleSatisfiesVacuum */ - if (sv_infomask != tuple.t_data->t_infomask) - pgchanged = true; - if (tupgone) { ItemId lpp; |