aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Misch <noah@leadboat.com>2024-10-24 09:16:14 -0700
committerNoah Misch <noah@leadboat.com>2024-10-24 09:16:17 -0700
commite11907682846a38068cf0960cd05006b31a9335f (patch)
tree8785ba86f3b7f5a7b0caed47b37906630adb46de
parent0a059206fc5904820c838a6ae7478084ffdcf650 (diff)
downloadpostgresql-e11907682846a38068cf0960cd05006b31a9335f.tar.gz
postgresql-e11907682846a38068cf0960cd05006b31a9335f.zip
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
-rw-r--r--src/backend/access/heap/heapam.c3
-rw-r--r--src/test/isolation/expected/intra-grant-inplace.out24
-rw-r--r--src/test/isolation/specs/intra-grant-inplace.spec8
3 files changed, 33 insertions, 2 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index cb65faafe8f..6110d3e8a60 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -6278,10 +6278,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;
diff --git a/src/test/isolation/expected/intra-grant-inplace.out b/src/test/isolation/expected/intra-grant-inplace.out
index b5fe8b06f76..4e9695a0214 100644
--- a/src/test/isolation/expected/intra-grant-inplace.out
+++ b/src/test/isolation/expected/intra-grant-inplace.out
@@ -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:
diff --git a/src/test/isolation/specs/intra-grant-inplace.spec b/src/test/isolation/specs/intra-grant-inplace.spec
index 2992c85b44d..9936d389359 100644
--- a/src/test/isolation/specs/intra-grant-inplace.spec
+++ b/src/test/isolation/specs/intra-grant-inplace.spec
@@ -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