Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd1cfde

Browse files
committed
Fix RBM_ZERO_AND_LOCK mode to not acquire lock on local buffers.
Commit81c4508 introduced a new RBM_ZERO_AND_LOCK mode to ReadBuffer, whichtakes a lock on the buffer before zeroing it. However, you cannot take alock on a local buffer, and you got a segfault instead. The version of thatpatch committed to master included a check for !isLocalBuf, and thereforedidn't crash, but oddly I missed that in the back-patched versions. Thispatch adds that check to the back-branches too.RBM_ZERO_AND_LOCK mode is only used during WAL replay, and in hash indexes.WAL replay only deals with shared buffers, so the only way to trigger thebug is with a temporary hash index.Reported by Artem Ignatyev, analysis by Tom Lane.
1 parentb93c8ea commitbd1cfde

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

‎src/backend/storage/buffer/bufmgr.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,8 @@ ReadBuffer_common(SMgrRelation smgr, bool isLocalBuf, ForkNumber forkNum,
483483
* (Note that we cannot use LockBuffer() of LockBufferForCleanup() here,
484484
* because they assert that the buffer is already valid.)
485485
*/
486-
if (mode==RBM_ZERO_AND_LOCK||mode==RBM_ZERO_AND_CLEANUP_LOCK)
486+
if ((mode==RBM_ZERO_AND_LOCK||mode==RBM_ZERO_AND_CLEANUP_LOCK)&&
487+
!isLocalBuf)
487488
LWLockAcquire(bufHdr->content_lock,LW_EXCLUSIVE);
488489

489490
if (isLocalBuf)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp