mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Add pg_memory_is_all_zeros() in memutils.h
This new function tests if a memory region starting at a given location for a defined length is made only of zeroes. This unifies in a single path the all-zero checks that were happening in a couple of places of the backend code: - For pgstats entries of relation, checkpointer and bgwriter, where some "all_zeroes" variables were previously used with memcpy(). - For all-zero buffer pages in PageIsVerifiedExtended(). This new function uses the same forward scan as the check for all-zero buffer pages, applying it to the three pgstats paths mentioned above. Author: Bertrand Drouvot Reviewed-by: Peter Eisentraut, Heikki Linnakangas, Peter Smith Discussion: https://postgr.es/m/ZupUDDyf1hHI4ibn@ip-10-97-1-34.eu-west-3.compute.internal
This commit is contained in:
@@ -89,10 +89,8 @@ PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags)
|
||||
{
|
||||
PageHeader p = (PageHeader) page;
|
||||
size_t *pagebytes;
|
||||
int i;
|
||||
bool checksum_failure = false;
|
||||
bool header_sane = false;
|
||||
bool all_zeroes = false;
|
||||
uint16 checksum = 0;
|
||||
|
||||
/*
|
||||
@@ -126,18 +124,9 @@ PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags)
|
||||
}
|
||||
|
||||
/* Check all-zeroes case */
|
||||
all_zeroes = true;
|
||||
pagebytes = (size_t *) page;
|
||||
for (i = 0; i < (BLCKSZ / sizeof(size_t)); i++)
|
||||
{
|
||||
if (pagebytes[i] != 0)
|
||||
{
|
||||
all_zeroes = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (all_zeroes)
|
||||
if (pg_memory_is_all_zeros(pagebytes, (BLCKSZ / sizeof(size_t))))
|
||||
return true;
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user