diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index 6ff51d01fd413dfb0dc13eea3e92e617c7357404..8735db1ae1c577d62a5a707d166b4bbe31b5ac3d 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -198,6 +198,8 @@ XLogReadBuffer(bool extend, Relation reln, BlockNumber blkno)
 			Assert(InRecovery);
 			while (lastblock <= blkno)
 			{
+				if (buffer != InvalidBuffer)
+                                        ReleaseBuffer(buffer); /* must be WriteBuffer()? */
 				buffer = ReadBuffer(reln, P_NEW);
 				lastblock++;
 			}