On Mon, Apr 06, 2026 at 11:36:21AM +0900, Michael Paquier wrote: > On Mon, Apr 06, 2026 at 09:55:14AM +0900, Michael Paquier wrote: >> Right, down to v18 where this has been introduced. That's my bug, so >> I'd be OK to take care of it myself, if you are OK with that of >> course. > > Note: something is wrong with -m32, for both patches. Digging into > that..
And I have been puzzled for a few minutes here, trying to figure out if this was something in v18 or something with the new shmem routines. It is nothing of the kind: test_custom_stats has been underestimating its shared_size, using PgStat_StatCustomFixedEntry instead of PgStatShared_CustomFixedEntry. Interesting copy-pasto, HEAD-only, second bug. The attached is working correctly. The v18 flavor is slightly simpler. -- Michael
From 943746c5b430b485e15c44a0b7bf099454cee7dd Mon Sep 17 00:00:00 2001 From: Michael Paquier <[email protected]> Date: Mon, 6 Apr 2026 09:47:02 +0900 Subject: [PATCH v3] Use the allocated space properly for custom stats kind --- src/backend/utils/activity/pgstat_shmem.c | 7 ++++--- .../modules/test_custom_stats/test_custom_fixed_stats.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c index 955faf5ebc7d..b8f354c818a0 100644 --- a/src/backend/utils/activity/pgstat_shmem.c +++ b/src/backend/utils/activity/pgstat_shmem.c @@ -150,8 +150,7 @@ StatsShmemSize(void) continue; Assert(kind_info->shared_size != 0); - - sz += MAXALIGN(kind_info->shared_size); + sz = add_size(sz, MAXALIGN(kind_info->shared_size)); } return sz; @@ -189,6 +188,7 @@ StatsShmemInit(void *arg) * efficiency win. */ ctl->raw_dsa_area = p; + p += pgstat_dsa_init_size(); dsa = dsa_create_in_place(ctl->raw_dsa_area, pgstat_dsa_init_size(), LWTRANCHE_PGSTATS_DSA, NULL); @@ -242,7 +242,8 @@ StatsShmemInit(void *arg) int idx = kind - PGSTAT_KIND_CUSTOM_MIN; Assert(kind_info->shared_size != 0); - ctl->custom_data[idx] = ShmemAlloc(kind_info->shared_size); + ctl->custom_data[idx] = p; + p += MAXALIGN(kind_info->shared_size); ptr = ctl->custom_data[idx]; } diff --git a/src/test/modules/test_custom_stats/test_custom_fixed_stats.c b/src/test/modules/test_custom_stats/test_custom_fixed_stats.c index f9e7c7172802..a066ce117a6d 100644 --- a/src/test/modules/test_custom_stats/test_custom_fixed_stats.c +++ b/src/test/modules/test_custom_stats/test_custom_fixed_stats.c @@ -50,7 +50,7 @@ static const PgStat_KindInfo custom_stats = { .fixed_amount = true, /* exactly one entry */ .write_to_file = true, /* persist to stats file */ - .shared_size = sizeof(PgStat_StatCustomFixedEntry), + .shared_size = sizeof(PgStatShared_CustomFixedEntry), .shared_data_off = offsetof(PgStatShared_CustomFixedEntry, stats), .shared_data_len = sizeof(((PgStatShared_CustomFixedEntry *) 0)->stats), -- 2.53.0
From f6787781026c7dcf6c9a38b0e7f8c8427a7b2da6 Mon Sep 17 00:00:00 2001 From: Michael Paquier <[email protected]> Date: Mon, 6 Apr 2026 09:47:02 +0900 Subject: [PATCH v3] Use the allocated space properly for custom stats kind --- src/backend/utils/activity/pgstat_shmem.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c index 08ec264baa3a..2b7f783ef7c4 100644 --- a/src/backend/utils/activity/pgstat_shmem.c +++ b/src/backend/utils/activity/pgstat_shmem.c @@ -142,8 +142,7 @@ StatsShmemSize(void) continue; Assert(kind_info->shared_size != 0); - - sz += MAXALIGN(kind_info->shared_size); + sz = add_size(sz, MAXALIGN(kind_info->shared_size)); } return sz; @@ -227,7 +226,8 @@ StatsShmemInit(void) int idx = kind - PGSTAT_KIND_CUSTOM_MIN; Assert(kind_info->shared_size != 0); - ctl->custom_data[idx] = ShmemAlloc(kind_info->shared_size); + ctl->custom_data[idx] = p; + p += MAXALIGN(kind_info->shared_size); ptr = ctl->custom_data[idx]; } -- 2.53.0
signature.asc
Description: PGP signature
