aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/multixact.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index c8faa177030..928f9fe5d6c 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -1970,14 +1970,6 @@ TrimMultiXact(void)
int entryno;
int flagsoff;
- /*
- * During a binary upgrade, make sure that the offsets SLRU is large
- * enough to contain the next value that would be created. It's fine to do
- * this here and not in StartupMultiXact() since binary upgrades should
- * never need crash recovery.
- */
- if (IsBinaryUpgrade)
- MaybeExtendOffsetSlru();
/* Clean up offsets state */
LWLockAcquire(MultiXactOffsetControlLock, LW_EXCLUSIVE);
@@ -2118,6 +2110,20 @@ MultiXactSetNextMXact(MultiXactId nextMulti,
MultiXactState->nextMXact = nextMulti;
MultiXactState->nextOffset = nextMultiOffset;
LWLockRelease(MultiXactGenLock);
+
+ /*
+ * During a binary upgrade, make sure that the offsets SLRU is large
+ * enough to contain the next value that would be created.
+ *
+ * We need to do this pretty early during the first startup in binary
+ * upgrade mode: before StartupMultiXact() in fact, because this routine is
+ * called even before that by StartupXLOG(). And we can't do it earlier
+ * than at this point, because during that first call of this routine we
+ * determine the MultiXactState->nextMXact value that MaybeExtendOffsetSlru
+ * needs.
+ */
+ if (IsBinaryUpgrade)
+ MaybeExtendOffsetSlru();
}
/*
@@ -2513,8 +2519,6 @@ MultiXactOffsetWouldWrap(MultiXactOffset boundary, MultiXactOffset start,
{
MultiXactOffset finish;
- Assert(distance >= 0);
-
/*
* Note that offset number 0 is not used (see GetMultiXactIdMembers), so
* if the addition wraps around the UINT_MAX boundary, skip that value.