On 28.08.25 04:27, Chao Li wrote:
On Aug 27, 2025, at 17:24, Peter Eisentraut <[email protected]> wrote:
This style of having Foo be a type alias for pointer-to-FooData is an
ancient Postgres coding convention that does not map well to modern C
that has an emphasis on judicious use of qualifiers and attributes,
and so if this abstraction gets in the way, we sometimes crack it
open, like in the case of ItemPointerGetBlockNumber() etc.
You are right, we want to protect the stuff that “tid” points to instead
of “tid” itself:
*tid = something; // should hit compile error
tid = something; // ok
Also, thanks for telling the history. I have updated the patch to use
“const ItemPointerData *” in the same way as ItemPointerGetBlockNumber().
Attached is the v2 patch.
This patch still causes a compiler warning:
../src/backend/storage/lmgr/lmgr.c: In function 'XactLockTableWait':
../src/backend/storage/lmgr/lmgr.c:681:27: error: assignment discards
'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
I have fixed that and committed your patch.