From 3bfa6ec401d14054ede1d9c3c0351a5a045049cf Mon Sep 17 00:00:00 2001
From: Takashi Menjo <takashi.menjou.vg@hco.ntt.co.jp>
Date: Thu, 20 Jan 2022 12:01:56 +0900
Subject: [PATCH v8 09/11] Fix wrong handling of missingContrecPtr

For test/recovery/t/026 to pass.

This may melt into "Preallocate and initialize more WAL if wal_pmem_map=true".
---
 src/backend/access/transam/xlog.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 15379481fa..f19a451f63 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -8245,7 +8245,15 @@ StartupXLOG(void)
 	 * Preallocate additional log files, if wanted.
 	 */
 	if (wal_pmem_map)
+	{
+		/*
+		 * AdvanceXLInsertBuffer may reset missingContrecPtr, so we
+		 * save and restore it for CreateOverwriteContrecordRecord.
+		 */
+		XLogRecPtr savedMissingContrecPtr = missingContrecPtr;
 		AdvanceXLInsertBuffer(InvalidXLogRecPtr, newTLI, true);
+		missingContrecPtr = savedMissingContrecPtr;
+	}
 	else
 		PreallocXlogFiles(EndOfLog, newTLI);
 
-- 
2.25.1

