118
118
* The situation for members is a bit more complex: we store one byte of
119
119
* additional flag bits for each TransactionId. To do this without getting
120
120
* into alignment issues, we store eight bytes of flags, and then the
121
- * corresponding 8 Xids. Each such 9-word (20 -byte) set we call a "group", and
122
- * are stored as a whole in pages. Thus, with 8kB BLCKSZ, we keep 409 groups
123
- * per page. This wastes 12 bytes per page, but that's OK -- simplicity (and
121
+ * corresponding 8 Xids. Each such 9-word (72 -byte) set we call a "group", and
122
+ * are stored as a whole in pages. Thus, with 8kB BLCKSZ, we keep 113 groups
123
+ * per page. This wastes 56 bytes per page, but that's OK -- simplicity (and
124
124
* performance) trumps space efficiency here.
125
125
*
126
126
* Note that the "offset" macros work with byte offset, not array indexes, so
@@ -878,8 +878,8 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset,
878
878
for (i = 0 ; i < nmembers ; i ++ , offset ++ )
879
879
{
880
880
TransactionId * memberptr ;
881
- uint32 * flagsptr ;
882
- uint32 flagsval ;
881
+ uint64 * flagsptr ;
882
+ uint64 flagsval ;
883
883
int bshift ;
884
884
int flagsoff ;
885
885
int memberoff ;
@@ -903,12 +903,12 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset,
903
903
904
904
* memberptr = members [i ].xid ;
905
905
906
- flagsptr = (uint32 * )
906
+ flagsptr = (uint64 * )
907
907
(MultiXactMemberCtl -> shared -> page_buffer [slotno ] + flagsoff );
908
908
909
909
flagsval = * flagsptr ;
910
- flagsval &= ~(((1 << MXACT_MEMBER_BITS_PER_XACT ) - 1 ) << bshift );
911
- flagsval |= (members [i ].status << bshift );
910
+ flagsval &= ~((uint64 )( (1 << MXACT_MEMBER_BITS_PER_XACT ) - 1 ) << bshift );
911
+ flagsval |= (( uint64 ) members [i ].status << bshift );
912
912
* flagsptr = flagsval ;
913
913
914
914
MultiXactMemberCtl -> shared -> page_dirty [slotno ] = true;
@@ -1388,7 +1388,7 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members,
1388
1388
for (i = 0 ; i < length ; i ++ , offset ++ )
1389
1389
{
1390
1390
TransactionId * xactptr ;
1391
- uint32 * flagsptr ;
1391
+ uint64 * flagsptr ;
1392
1392
int flagsoff ;
1393
1393
int bshift ;
1394
1394
int memberoff ;
@@ -1414,7 +1414,7 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members,
1414
1414
1415
1415
flagsoff = MXOffsetToFlagsOffset (offset );
1416
1416
bshift = MXOffsetToFlagsBitShift (offset );
1417
- flagsptr = (uint32 * ) (MultiXactMemberCtl -> shared -> page_buffer [slotno ] + flagsoff );
1417
+ flagsptr = (uint64 * ) (MultiXactMemberCtl -> shared -> page_buffer [slotno ] + flagsoff );
1418
1418
1419
1419
ptr [truelength ].xid = * xactptr ;
1420
1420
ptr [truelength ].status = (* flagsptr >> bshift ) & MXACT_MEMBER_XACT_BITMASK ;
0 commit comments