postgres.git / summary / log / commit / refs

commit    4dbc54506c328a03070bf1a98309bdc05dac331d
Author:   Melanie Plageman <melanieplageman@gmail.com>
Date:     Fri Jul 17 20:47:33 2026 +0000

    Turn visibilitymap_clear() Assert back into an error
    
    Commit ed62d26caca fixed a bug in clearing the visibility map and, while
    doing so, made some incidental changes to visibilitymap_clear(). One of
    them replaced the error thrown when the wrong buffer is passed to
    visibilitymap_clear() with an Assert().
    
    While anyone adding a new visibilitymap_clear() caller should be running
    assert-enabled builds, visibilitymap_set() still reports the same
    wrong-buffer condition with an elog(ERROR), so visibilitymap_clear()
    should also do so for consistency. This change was also unrelated to
    the bug fix and is better made as a separate commit. Restore the error.
    
    Reported-by: Fujii Masao <masao.fujii@gmail.com>
    Discussion: https://postgr.es/m/CAHGQGwF_PzOv5y7ucFh7Fqqqa8ar83zYwvWugqarRD6%2B7GCtEQ%40mail.gmail.com
    Backpatch-through: 19


src/backend/access/heap/visibilitymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/access/heap/visibilitymap.c b/src/backend/access/heap/visibilitymap.c index 1d50e41b629..b152189d4bf 100644 --- a/src/backend/access/heap/visibilitymap.c +++ b/src/backend/access/heap/visibilitymap.c @@ -154,9 +154,7 @@ visibilitymap_clear(RelFileLocator rlocator, BlockNumber heapBlk, { int mapByte = HEAPBLK_TO_MAPBYTE(heapBlk); int mapOffset = HEAPBLK_TO_OFFSET(heapBlk); -#ifdef USE_ASSERT_CHECKING BlockNumber mapBlock = HEAPBLK_TO_MAPBLOCK(heapBlk); -#endif uint8 mask = flags << mapOffset; Page page; char *map; @@ -172,7 +170,9 @@ visibilitymap_clear(RelFileLocator rlocator, BlockNumber heapBlk, heapBlk); #endif - Assert(BufferIsValid(vmbuf) && BufferGetBlockNumber(vmbuf) == mapBlock); + if (!BufferIsValid(vmbuf) || BufferGetBlockNumber(vmbuf) != mapBlock) + elog(ERROR, "wrong buffer passed to visibilitymap_clear"); + Assert(BufferIsLockedByMeInMode(vmbuf, BUFFER_LOCK_EXCLUSIVE)); page = BufferGetPage(vmbuf); [parent: a32733d8f10f]