public inbox for [email protected]  
help / color / mirror / Atom feed
From: Michael Paquier <[email protected]>
To: Heikki Linnakangas <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: Shmem allocated wrong for custom cumulative stats
Date: Mon, 6 Apr 2026 12:14:06 +0900
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<[email protected]>
	<[email protected]>

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



Attachments:

  [text/plain] v3-0001-Use-the-allocated-space-properly-for-custom--HEAD.patch (2.1K, 2-v3-0001-Use-the-allocated-space-properly-for-custom--HEAD.patch)
  download | inline diff:
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



  [text/plain] v3-0001-Use-the-allocated-space-properly-for-custom-s-v18.patch (1.1K, 3-v3-0001-Use-the-allocated-space-properly-for-custom-s-v18.patch)
  download | inline diff:
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



  [application/pgp-signature] signature.asc (833B, 4-signature.asc)
  download

view thread (5+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: Shmem allocated wrong for custom cumulative stats
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox