Clarify comment on multixid offset wraparound check REL_18_STABLE github/REL_18_STABLE
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 15 Dec 2025 09:47:04 +0000 (11:47 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 15 Dec 2025 09:47:33 +0000 (11:47 +0200)
Coverity complained that offset cannot be 0 here because there's an
explicit check for "offset == 0" earlier in the function, but it
didn't see the possibility that offset could've wrapped around to 0.
The code is correct, but clarify the comment about it.

The same code exists in backbranches in the server
GetMultiXactIdMembers() function and in 'master' in the pg_upgrade
GetOldMultiXactIdSingleMember function. In backbranches Coverity
didn't complain about it because the check was merely an assertion,
but change the comment in all supported branches for consistency.

Per Tom Lane's suggestion.

Discussion: https://www.postgresql.org/message-id/1827755.1765752936@sss.pgh.pa.us

src/backend/access/transam/multixact.c

index 2dd62c7feda53619a1c2f8c9b5a87f82e99dec32..fb705072da942cf26f11cd47c6ac4a5453e5f02a 100644 (file)
@@ -1608,7 +1608,10 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members,
 
        if (!TransactionIdIsValid(*xactptr))
        {
-           /* Corner case 2: we must be looking at unused slot zero */
+           /*
+            * Corner case 2: offset must have wrapped around to unused slot
+            * zero.
+            */
            Assert(offset == 0);
            continue;
        }