Stop reading uninitialized memory in heap_inplace_lock().

Stop computing a never-used value.  This removes the read; the read had
no functional implications.  Back-patch to v12, like commit
a07e03fd8fa7daf4d1356f7cb501ffe784ea6257.

Reported by Alexander Lakhin.

Discussion: https://postgr.es/m/6c92f59b-f5bc-e58c-9bdd-d1f21c17c786@gmail.com
This commit is contained in:
Noah Misch 2024-10-24 09:16:14 -07:00
parent af4e342034
commit d34ffbaa10
3 changed files with 33 additions and 2 deletions
src
backend/access/heap
test/isolation

@ -6229,10 +6229,9 @@ heap_inplace_lock(Relation relation,
LockTupleMode lockmode = LockTupleNoKeyExclusive;
MultiXactStatus mxact_status = MultiXactStatusNoKeyUpdate;
int remain;
bool current_is_member;
if (DoesMultiXactIdConflict((MultiXactId) xwait, infomask,
lockmode, &current_is_member))
lockmode, NULL))
{
LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
ret = false;

@ -63,6 +63,30 @@ step addk2: ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); <waiting ...>
step r3: ROLLBACK;
step addk2: <... completed>
starting permutation: b3 sfnku3 keyshr5 addk2 r3
step b3: BEGIN ISOLATION LEVEL READ COMMITTED;
step sfnku3:
SELECT relhasindex FROM pg_class
WHERE oid = 'intra_grant_inplace'::regclass FOR NO KEY UPDATE;
relhasindex
-----------
f
(1 row)
step keyshr5:
SELECT relhasindex FROM pg_class
WHERE oid = 'intra_grant_inplace'::regclass FOR KEY SHARE;
relhasindex
-----------
f
(1 row)
step addk2: ALTER TABLE intra_grant_inplace ADD PRIMARY KEY (c); <waiting ...>
step r3: ROLLBACK;
step addk2: <... completed>
starting permutation: b2 sfnku2 addk2 c2
step b2: BEGIN;
step sfnku2:

@ -96,6 +96,14 @@ permutation
addk2(r3)
r3
# reproduce bug in DoesMultiXactIdConflict() call
permutation
b3
sfnku3
keyshr5
addk2(r3)
r3
# same-xact rowmark
permutation
b2