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
