mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +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:
		| @@ -884,11 +884,14 @@ CheckpointerShmemSize(void) | ||||
| 	Size		size; | ||||
|  | ||||
| 	/* | ||||
| 	 * Currently, the size of the requests[] array is arbitrarily set equal to | ||||
| 	 * NBuffers.  This may prove too large or small ... | ||||
| 	 * The size of the requests[] array is arbitrarily set equal to NBuffers. | ||||
| 	 * 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 = add_size(size, mul_size(NBuffers, sizeof(CheckpointerRequest))); | ||||
| 	size = add_size(size, mul_size(Min(NBuffers, | ||||
| 									   MAX_CHECKPOINT_REQUESTS), | ||||
| 								   sizeof(CheckpointerRequest))); | ||||
|  | ||||
| 	return size; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user