From 2df5c59b5680ba5f8350c82b5c6b287e36e73468 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu, 2 Sep 2021 18:03:35 -0400
Subject: [PATCH v4 3/4] debugging changes

---
 src/backend/access/transam/xlog.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 49912483d5..7f19b355da 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -726,6 +726,8 @@ typedef struct XLogCtlData
 	XLogRecPtr	lastFpwDisableRecPtr;
 
 	slock_t		info_lck;		/* locks shared variables shown above */
+
+	bool		crossSeg;
 } XLogCtlData;
 
 static XLogCtlData *XLogCtl = NULL;
@@ -1161,6 +1163,13 @@ XLogInsertRecord(XLogRecData *rdata,
 	 */
 	if (StartPos / XLOG_BLCKSZ != EndPos / XLOG_BLCKSZ)
 	{
+		XLogSegNo	StartSeg, EndSeg;
+
+		XLByteToSeg(StartPos, StartSeg, wal_segment_size);
+		XLByteToSeg(EndPos, EndSeg, wal_segment_size);
+		if (StartSeg != EndSeg)
+			XLogCtl->crossSeg = true;
+
 		SpinLockAcquire(&XLogCtl->info_lck);
 		/* advance global request to include new block(s) */
 		if (XLogCtl->LogwrtRqst.Write < EndPos)
@@ -2624,11 +2633,21 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible)
 			{
 				issue_xlog_fsync(openLogFile, openLogSegNo);
 
+				if (XLogCtl->crossSeg)
+				{
+					static int c = 0;
+					struct stat b;
+
+					if (stat("/tmp/hoge", &b) == 0)
+						Assert(c++ < 1);
+				}
+
 				/* signal that we need to wakeup walsenders later */
 				WalSndWakeupRequest();
 
 				LogwrtResult.Flush = LogwrtResult.Write;	/* end of page */
 
+				/* XXX can we give this responsibility to WAL writer? */
 				if (XLogArchivingActive())
 					XLogArchiveNotifySeg(openLogSegNo);
 
-- 
2.30.2

