From 167cb26718e3eae4fef470900b4cd1d434f15649 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 18 Dec 2025 07:33:40 +0900 Subject: [PATCH] Fix const correctness in pgstat data serialization callbacks 4ba012a8ed9c defined the "header" (pointer to the stats data) of from_serialized_data() as a const, even though it is fine (and expected!) for the callback to modify the shared memory entry when loading the stats at startup. While on it, this commit updates the callback to_serialized_data() in the test module test_custom_stats to make the data extracted from the "header" parameter a const since it should never be modified: the stats are written to disk and no modifications are expected in the shared memory entry. This clarifies the API contract of these new callbacks. Reported-By: Peter Eisentraut Author: Michael Paquier Co-authored-by: Sami Imseih Discussion: https://postgr.es/m/d87a93b0-19c7-4db6-b9c0-d6827e7b2da1@eisentraut.org --- src/include/utils/pgstat_internal.h | 5 +++-- src/test/modules/test_custom_stats/test_custom_var_stats.c | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/include/utils/pgstat_internal.h b/src/include/utils/pgstat_internal.h index 5c1ce4d3d6a..7dffab8dbdd 100644 --- a/src/include/utils/pgstat_internal.h +++ b/src/include/utils/pgstat_internal.h @@ -329,13 +329,14 @@ typedef struct PgStat_KindInfo * * "statfile" is a pointer to the on-disk stats file, named * PGSTAT_STAT_PERMANENT_FILENAME. "key" is the hash key of the entry - * just written or read. "header" is a pointer to the stats data. + * just written or read. "header" is a pointer to the stats data; it may + * be modified only in from_serialized_data to reconstruct an entry. */ void (*to_serialized_data) (const PgStat_HashKey *key, const PgStatShared_Common *header, FILE *statfile); bool (*from_serialized_data) (const PgStat_HashKey *key, - const PgStatShared_Common *header, + PgStatShared_Common *header, FILE *statfile); /* diff --git a/src/test/modules/test_custom_stats/test_custom_var_stats.c b/src/test/modules/test_custom_stats/test_custom_var_stats.c index c71922dc4a8..294085d6866 100644 --- a/src/test/modules/test_custom_stats/test_custom_var_stats.c +++ b/src/test/modules/test_custom_stats/test_custom_var_stats.c @@ -92,7 +92,7 @@ static void test_custom_stats_var_to_serialized_data(const PgStat_HashKey *key, /* Deserialization callback: read auxiliary entry data */ static bool test_custom_stats_var_from_serialized_data(const PgStat_HashKey *key, - const PgStatShared_Common *header, + PgStatShared_Common *header, FILE *statfile); /* Finish callback: end of statistics file operations */ @@ -196,7 +196,7 @@ test_custom_stats_var_to_serialized_data(const PgStat_HashKey *key, { char *description; size_t len; - PgStatShared_CustomVarEntry *entry = (PgStatShared_CustomVarEntry *) header; + const PgStatShared_CustomVarEntry *entry = (const PgStatShared_CustomVarEntry *) header; bool found; uint32 magic_number = TEST_CUSTOM_VAR_MAGIC_NUMBER; @@ -276,7 +276,7 @@ test_custom_stats_var_to_serialized_data(const PgStat_HashKey *key, */ static bool test_custom_stats_var_from_serialized_data(const PgStat_HashKey *key, - const PgStatShared_Common *header, + PgStatShared_Common *header, FILE *statfile) { PgStatShared_CustomVarEntry *entry; -- 2.39.5