Hi hackers,

While working on [1], I noticed that there is a type mismatch when computing
the key size for the PrivateRefCount hash table. Indeed, the first
PrivateRefCountEntry member type is Buffer (int), so the keysize should be
sizeof(Buffer) and not sizeof(int32).

PFA attached a patch to fix it.

It has been kind of automatically detected while working on [1], so I'm pretty
confident there are no other type mismatches for hash table key size.

Note that this is exactly the kind of issue that the macro proposed in [1] would
avoid.

[1]: 
https://www.postgresql.org/message-id/flat/aS2b3LoUypW1/Gdz%40ip-10-97-1-34.eu-west-3.compute.internal

Regards,

-- 
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com
>From 5cc49008cbd1876878d51fd7a1331e2358038148 Mon Sep 17 00:00:00 2001
From: Bertrand Drouvot <[email protected]>
Date: Tue, 2 Dec 2025 14:07:45 +0000
Subject: [PATCH v1] Fix PrivateRefCount hash table key size

The first PrivateRefCountEntry member is Buffer (int), so the keysize should
be sizeof(Buffer) and not sizeof(int32).
---
 src/backend/storage/buffer/bufmgr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 100.0% src/backend/storage/buffer/

diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index f373cead95f..b6cde7e3803 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -4019,7 +4019,7 @@ InitBufferManagerAccess(void)
 
 	memset(&PrivateRefCountArray, 0, sizeof(PrivateRefCountArray));
 
-	hash_ctl.keysize = sizeof(int32);
+	hash_ctl.keysize = sizeof(Buffer);
 	hash_ctl.entrysize = sizeof(PrivateRefCountEntry);
 
 	PrivateRefCountHash = hash_create("PrivateRefCount", 100, &hash_ctl,
-- 
2.34.1

Reply via email to