From 056b123ae41d8ee8da5fdf5d4ee9cd886a52b2d9 Mon Sep 17 00:00:00 2001 From: Bob 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