From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Thu, 13 Nov 2014 15:54:20 +0000 (+0200)
Subject: Fix XLogReadBufferForRedoExtended to get cleanup lock when asked to do so.
X-Git-Tag: REL9_5_ALPHA1~1225
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=34402ae351e71f852a6c2fee7861a66d0dbeb24c;p=postgresql

Fix XLogReadBufferForRedoExtended to get cleanup lock when asked to do so.
---

diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index 1a21dac853..da0e45bfcc 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -312,7 +312,10 @@ XLogReadBufferForRedoExtended(XLogRecPtr lsn, XLogRecord *record,
 		*buf = XLogReadBufferExtended(rnode, forkno, blkno, mode);
 		if (BufferIsValid(*buf))
 		{
-			LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE);
+			if (get_cleanup_lock)
+				LockBufferForCleanup(*buf);
+			else
+				LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE);
 			if (lsn <= PageGetLSN(BufferGetPage(*buf)))
 				return BLK_DONE;
 			else