44 bool prev_multixid_valid =
false;
66 if (to_multi != from_multi)
74 for (
MultiXactId multi = from_multi; multi != to_multi;)
99 (multixid_valid || prev_multixid_valid) ? next_offset : 0);
112 prev_multixid_valid = multixid_valid;
120 prev_multixid_valid ? next_offset : 0);
147 offptr[entryno] = offset;
160 for (
int i = 0;
i < nmembers;
i++, offset++)
182 *memberptr = members[
i].
xid;
186 flagsval = *flagsptr;
188 flagsval |= (members[
i].
status << bshift);
189 *flagsptr = flagsval;
TransactionId MultiXactId
Assert(PointerIsAligned(start, uint64))
#define MXACT_MEMBER_BITS_PER_XACT
static int MXOffsetToFlagsBitShift(MultiXactOffset32 offset)
static int64 MXOffsetToMemberPage(MultiXactOffset32 offset)
bool GetOldMultiXactIdSingleMember(OldMultiXactReader *state, MultiXactId multi, MultiXactMember *member)
static int MXOffsetToMemberOffset(MultiXactOffset32 offset)
static int MultiXactIdToOffsetEntry(MultiXactId multi)
static int64 MultiXactIdToOffsetPage(MultiXactId multi)
OldMultiXactReader * AllocOldMultiXactRead(char *pgdata, MultiXactId nextMulti, MultiXactOffset32 nextOffset)
void FreeOldMultiXactReader(OldMultiXactReader *state)
static int MXOffsetToFlagsOffset(MultiXactOffset32 offset)
static void RecordMultiXactOffset(SlruSegState *offsets_writer, MultiXactId multi, MultiXactOffset offset)
static void RecordMultiXactMembers(SlruSegState *members_writer, MultiXactOffset offset, int nmembers, MultiXactMember *members)
MultiXactOffset rewrite_multixacts(MultiXactId from_multi, MultiXactId to_multi)
static char buf[DEFAULT_XLOG_SEG_SIZE]
int int int int pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2
void FreeSlruWrite(SlruSegState *state)
SlruSegState * AllocSlruWrite(const char *dir, bool long_segment_names)
static char * SlruWriteSwitchPage(SlruSegState *state, uint64 pageno)