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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user