From dd0183469bb779247c96e86c2272dca7ff4ec9e7 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 29 Apr 2024 10:25:33 -0700 Subject: Avoid repeating loads of frozen ID values. Repeating loads of inplace-updated fields tends to cause bugs like the one from the previous commit. While there's no bug to fix in these code sites, adopt the load-once style. This improves the chance of future copy/paste finding the safe style. Discussion: https://postgr.es/m/20240423003956.e7.nmisch@google.com --- src/backend/postmaster/autovacuum.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/backend/postmaster') diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index c367ede6f88..9a925a10cdc 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -2938,6 +2938,7 @@ relation_needs_vacanalyze(Oid relid, int freeze_max_age; int multixact_freeze_max_age; TransactionId xidForceLimit; + TransactionId relfrozenxid; MultiXactId multiForceLimit; Assert(classForm != NULL); @@ -2989,16 +2990,18 @@ relation_needs_vacanalyze(Oid relid, xidForceLimit = recentXid - freeze_max_age; if (xidForceLimit < FirstNormalTransactionId) xidForceLimit -= FirstNormalTransactionId; - force_vacuum = (TransactionIdIsNormal(classForm->relfrozenxid) && - TransactionIdPrecedes(classForm->relfrozenxid, - xidForceLimit)); + relfrozenxid = classForm->relfrozenxid; + force_vacuum = (TransactionIdIsNormal(relfrozenxid) && + TransactionIdPrecedes(relfrozenxid, xidForceLimit)); if (!force_vacuum) { + MultiXactId relminmxid = classForm->relminmxid; + multiForceLimit = recentMulti - multixact_freeze_max_age; if (multiForceLimit < FirstMultiXactId) multiForceLimit -= FirstMultiXactId; - force_vacuum = MultiXactIdIsValid(classForm->relminmxid) && - MultiXactIdPrecedes(classForm->relminmxid, multiForceLimit); + force_vacuum = MultiXactIdIsValid(relminmxid) && + MultiXactIdPrecedes(relminmxid, multiForceLimit); } *wraparound = force_vacuum; -- cgit v1.2.3