From: Michael Paquier Date: Tue, 7 Apr 2026 02:59:54 +0000 (+0900) Subject: Fix shmem allocation of fixed-sized custom stats kind X-Git-Tag: REL_18_4~83 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93f08dc92cf822b9f9dc1ef5cd815b04c65e8718;p=thirdparty%2Fpostgresql.git Fix shmem allocation of fixed-sized custom stats kind StatsShmemSize(), that computes the shmem size needed for pgstats, includes the amount of shared memory wanted by all the custom stats kinds registered. However, the shared memory allocation was done by ShmemAlloc() in StatsShmemInit(), meaning that the space reserved was not used, wasting some memory. These extra allocations would show up under "" in pg_shmem_allocations, as the allocations done by ShmemAlloc() are not tracked by ShmemIndexEnt. Issue introduced by 7949d9594582. Author: Heikki Linnakangas Discussion: https://postgr.es/m/04b04387-92f5-476c-90b0-4064e71c5f37@iki.fi Backpatch-through: 18 --- diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c index 08ec264baa3..2b7f783ef7c 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]; }