1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-18 12:22:09 +03:00

Fix checkpointer shared memory allocation

Use Min(NBuffers, MAX_CHECKPOINT_REQUESTS) instead of NBuffers in
CheckpointerShmemSize() to match the actual array size limit set in
CheckpointerShmemInit().  This prevents wasting shared memory when
NBuffers > MAX_CHECKPOINT_REQUESTS.  Also, fix the comment.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/1439188.1754506714%40sss.pgh.pa.us
Author: Xuneng Zhou <xunengzhou@gmail.com>
Co-authored-by: Alexander Korotkov <aekorotkov@gmail.com>
This commit is contained in:
Alexander Korotkov
2025-08-07 14:29:02 +03:00
parent 06633271ec
commit 7f872ae702

View File

@@ -846,11 +846,14 @@ CheckpointerShmemSize(void)
Size size; Size size;
/* /*
* Currently, the size of the requests[] array is arbitrarily set equal to * The size of the requests[] array is arbitrarily set equal to NBuffers.
* NBuffers. This may prove too large or small ... * But there is a cap of MAX_CHECKPOINT_REQUESTS to prevent accumulating
* too many checkpoint requests in the ring buffer.
*/ */
size = offsetof(CheckpointerShmemStruct, requests); size = offsetof(CheckpointerShmemStruct, requests);
size = add_size(size, mul_size(NBuffers, sizeof(CheckpointerRequest))); size = add_size(size, mul_size(Min(NBuffers,
MAX_CHECKPOINT_REQUESTS),
sizeof(CheckpointerRequest)));
return size; return size;
} }