mirror of
https://github.com/postgres/postgres.git
synced 2026-10-28 02:33:10 +03:00
Turn visibilitymap_clear() Assert back into an error
Commit ed62d26cac 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
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user