From f36c2e1a052ae30d6fbdc946f990ab079234e332 Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Thu, 12 Mar 2026 12:52:41 +0200
Subject: [PATCH 4/4] Add an explicit valgrind check in XLogInsert() for
 uninitialized data

Even without this, Valgrind complains if uninitialized memory copied
into the WAL, when the WAL is flushed to disk. With this commit, it's
caught earlier, in XLogInsert(), which makes it more clear where the
uninitialized data is coming from.
---
 src/backend/access/transam/xlog.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index b9b678f3722..8eae29a3548 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -98,6 +98,7 @@
 #include "utils/guc_hooks.h"
 #include "utils/guc_tables.h"
 #include "utils/injection_point.h"
+#include "utils/memdebug.h"
 #include "utils/pgstat_internal.h"
 #include "utils/ps_status.h"
 #include "utils/relmapper.h"
@@ -1259,6 +1260,8 @@ CopyXLogRecordToWAL(int write_len, bool isLogSwitch, XLogRecData *rdata,
 		const char *rdata_data = rdata->data;
 		int			rdata_len = rdata->len;
 
+		VALGRIND_CHECK_MEM_IS_DEFINED(rdata_data, rdata_len);
+
 		while (rdata_len > freespace)
 		{
 			/*
-- 
2.47.3

