From 056b123ae41d8ee8da5fdf5d4ee9cd886a52b2d9 Mon Sep 17 00:00:00 2001
From: Bob <bob@example.com>
Date: Sun, 15 Mar 2026 00:13:55 +0000
Subject: [PATCH 2/5] Use InvalidBuffer to indicate empty slot

Simple hash requires a mechanism to distinguish
empty slots. The previous implementation of refcount
simplehash was using the default `status` field, adding a
char to the PrivateRefCountEntr.

The buffer already has an reserved value InvalidBuffer that
can be used to mark an entry as empty. Making use of that
removes one field from PrivateRefCountEntry and keep it
32bit aligned, without padding required.
---
 src/backend/storage/buffer/bufmgr.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 00bc609529..db911327f9 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -125,8 +125,6 @@ typedef struct PrivateRefCountEntry
 	 */
 	Buffer		buffer;
 
-	char		status;
-
 	PrivateRefCountData data;
 } PrivateRefCountEntry;
 
@@ -136,6 +134,9 @@ typedef struct PrivateRefCountEntry
 #define SH_KEY buffer
 #define SH_HASH_KEY(tb, key) murmurhash32((uint32) (key))
 #define SH_EQUAL(tb, a, b) ((a) == (b))
+#define SH_ENTRY_EMPTY(entry) ((entry)->buffer == InvalidBuffer)
+#define SH_MAKE_EMPTY(entry) ((entry)->buffer = InvalidBuffer)
+#define SH_MAKE_IN_USE(entry) ((void)0) /* key assignment implies in use */
 #define SH_SCOPE static inline
 #define SH_DECLARE
 #define SH_DEFINE
-- 
2.34.1

