aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/activity/pgstat_checkpointer.c
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2024-11-01 11:35:46 +0900
committerMichael Paquier <michael@paquier.xyz>2024-11-01 11:35:46 +0900
commit07e9e28b56db4d8533b62b3a921f1e74aae26b1f (patch)
tree3811ed7c85d79d4e55525139a1f8ac3928fd572a /src/backend/utils/activity/pgstat_checkpointer.c
parent49d6c7d8dabad8c59ba21afe72ff32e79f822291 (diff)
downloadpostgresql-07e9e28b56db4d8533b62b3a921f1e74aae26b1f.tar.gz
postgresql-07e9e28b56db4d8533b62b3a921f1e74aae26b1f.zip
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
Diffstat (limited to 'src/backend/utils/activity/pgstat_checkpointer.c')
-rw-r--r--src/backend/utils/activity/pgstat_checkpointer.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/backend/utils/activity/pgstat_checkpointer.c b/src/backend/utils/activity/pgstat_checkpointer.c
index 5a3fb4a9e09..b2d8eb0d9c3 100644
--- a/src/backend/utils/activity/pgstat_checkpointer.c
+++ b/src/backend/utils/activity/pgstat_checkpointer.c
@@ -17,6 +17,7 @@
#include "postgres.h"
+#include "utils/memutils.h"
#include "utils/pgstat_internal.h"
@@ -29,8 +30,6 @@ PgStat_CheckpointerStats PendingCheckpointerStats = {0};
void
pgstat_report_checkpointer(void)
{
- /* We assume this initializes to zeroes */
- static const PgStat_CheckpointerStats all_zeroes;
PgStatShared_Checkpointer *stats_shmem = &pgStatLocal.shmem->checkpointer;
Assert(!pgStatLocal.shmem->is_shutdown);
@@ -40,8 +39,8 @@ pgstat_report_checkpointer(void)
* This function can be called even if nothing at all has happened. In
* this case, avoid unnecessarily modifying the stats entry.
*/
- if (memcmp(&PendingCheckpointerStats, &all_zeroes,
- sizeof(all_zeroes)) == 0)
+ if (pg_memory_is_all_zeros(&PendingCheckpointerStats,
+ sizeof(struct PgStat_CheckpointerStats)))
return;
pgstat_begin_changecount_write(&stats_shmem->changecount);