pgsql: Fix ReadRecentBuffer for local buffers. - Mailing list pgsql-committers

From Heikki Linnakangas
Subject pgsql: Fix ReadRecentBuffer for local buffers.
Date
Msg-id E1oFrHK-0019F5-A7@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix ReadRecentBuffer for local buffers.

It incorrectly used GetBufferDescriptor instead of
GetLocalBufferDescriptor, causing it to not find the correct buffer in
most cases, and performing an out-of-bounds memory read in the corner
case that temp_buffers > shared_buffers.

It also bumped the usage-count on the buffer, even if it was
previously pinned. That won't lead to crashes or incorrect results,
but it's different from what the shared-buffer case does, and
different from the usual code in LocalBufferAlloc. Fix that too, and
make the code ordering match LocalBufferAlloc() more closely, so that
it's easier to verify that it's doing the same thing.

Currently, ReadRecentBuffer() is only used with non-temp relations, in
WAL redo, so the broken code is currently dead code. However, it could
be used by extensions.

Backpatch-through: 14
Discussion: https://www.postgresql.org/message-id/2d74b46f-27c9-fb31-7f99-327a87184cc0%40iki.fi
Reviewed-by: Thomas Munro, Zhang Mingli, Richard Guo

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/19f82323db6312e0f2c4483dab95189c7f110648

Modified Files
--------------
src/backend/storage/buffer/bufmgr.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)


pgsql-committers by date:

Previous
From: Fujii Masao
Date:
Subject: pgsql: Remove useless arguments in ReadCheckpointRecord().
Next
From: Tom Lane
Date:
Subject: pgsql: Process session_preload_libraries within InitPostgres's transact