pg_buffercache: Fix memory allocation formula REL_18_STABLE github/REL_18_STABLE
authorMichael Paquier <[email protected]>
Thu, 11 Dec 2025 05:11:25 +0000 (14:11 +0900)
committerMichael Paquier <[email protected]>
Thu, 11 Dec 2025 05:11:25 +0000 (14:11 +0900)
The code over-allocated the memory required for os_page_status, relying
on uint64 for its element size instead of an int, hence doubling what
was required.  This could mean quite a lot of memory if dealing with a
lot of NUMA pages.

Oversight in ba2a3c2302f1.

Author: David Geier <[email protected]>
Discussion: https://postgr.es/m/ad0748d4-3080-436e-b0bc-ac8f86a3466a@gmail.com
Backpatch-through: 18

contrib/pg_buffercache/pg_buffercache_pages.c

index 3df04c98959e1257bf3652243f1b21cb350693e8..5a3d78d03d5b44fcfc72a38546d2f3775c1edc8f 100644 (file)
@@ -366,7 +366,7 @@ pg_buffercache_numa_pages(PG_FUNCTION_ARGS)
 
        /* Used to determine the NUMA node for all OS pages at once */
        os_page_ptrs = palloc0(sizeof(void *) * os_page_count);
-       os_page_status = palloc(sizeof(uint64) * os_page_count);
+       os_page_status = palloc(sizeof(int) * os_page_count);
 
        /* Fill pointers for all the memory pages. */
        idx = 0;