@ -70,14 +70,15 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
if ( BloomPageIsDeleted ( page ) )
if ( BloomPageIsDeleted ( page ) )
{
{
UnlockReleaseBuffer ( buffer ) ;
UnlockReleaseBuffer ( buffer ) ;
GenericXLogAbort ( gxlogState ) ;
CHECK_FOR_INTERRUPTS ( ) ;
CHECK_FOR_INTERRUPTS ( ) ;
continue ;
continue ;
}
}
/* Iterate over the tuples */
/* Iterate over the tuples */
itup = BloomPageGetTuple ( & state , page , 1 ) ;
itup = itupPtr = BloomPageGetTuple ( & state , page , FirstOffsetNumber ) ;
itupPtr = BloomPageGetTuple ( & state , page , 1 ) ;
itupEnd = BloomPageGetTuple ( & state , page ,
itupEnd = BloomPageGetTuple ( & state , page , BloomPageGetMaxOffset ( page ) + 1 ) ;
OffsetNumberNext ( BloomPageGetMaxOffset ( page ) ) ) ;
while ( itup < itupEnd )
while ( itup < itupEnd )
{
{
/* Do we have to delete this tuple? */
/* Do we have to delete this tuple? */
@ -104,10 +105,10 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
itup = BloomPageGetNextTuple ( & state , itup ) ;
itup = BloomPageGetNextTuple ( & state , itup ) ;
}
}
Assert ( itupPtr = = BloomPageGetTuple ( & state , page , BloomPageGetMaxOffset ( page ) + 1 ) ) ;
Assert ( itupPtr = = BloomPageGetTuple ( & state , page ,
OffsetNumberNext ( BloomPageGetMaxOffset ( page ) ) ) ) ;
if ( ! BloomPageIsDeleted ( page ) & &
if ( BloomPageGetFreeSpace ( & state , page ) > state . sizeOfBloomTuple & &
BloomPageGetFreeSpace ( & state , page ) > state . sizeOfBloomTuple & &
countPage < BloomMetaBlockN )
countPage < BloomMetaBlockN )
notFullPage [ countPage + + ] = blkno ;
notFullPage [ countPage + + ] = blkno ;