Switch Get[Local]BufferDescriptor() to use a signed value in input
Michael Paquier <michael@paquier.xyz>
Switch Get[Local]BufferDescriptor() to use a signed value in input GetBufferDescriptor() and GetLocalBufferDescriptor() took a uint32 buffer index, but every real caller derives the index from a Buffer: - Unsigned value for shared buffers. - Signed value for local buffers. Both routines now take in input a signed number, GetBufferDescriptor() gaining an assertion checking that the input value is in the range allowed by the GUC shared_buffers. This work is a follow-up of e18b0cb7344c, where we found that passing down a value for a local buffer was undetected and finished outside the range of NBuffers. While monitoring all the existing callers of *BufferDescriptor(), the only consumer that passes does an unsigned value is ClockSweepTick(), whose result is always a module of NBuffers. Suggested-by: Andres Freund <andres@anarazel.de> Author: Ayush Tiwari <ayushtiwari.slg01@gmail.com> Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/CAExHW5uzRMYVZsXXS3HXXT0fG_sNrpUhUqwP4NorhaCqH9JDhA@mail.gmail.com
Files
| Path | Change | +/− |
|---|---|---|
| src/include/storage/buf_internals.h | modified | +4 −2 |
Discussion
- GetBufferDescriptor() being called for local buffers from MarkBufferDirtyHint() 16 messages · 2026-06-06 → 2026-07-03