diff options
| author | Noah Misch | 2024-04-29 17:25:33 +0000 |
|---|---|---|
| committer | Noah Misch | 2024-04-29 17:25:33 +0000 |
| commit | dd0183469bb779247c96e86c2272dca7ff4ec9e7 (patch) | |
| tree | 1e2998dec368e7476dde36894e2b7f4356308f12 /src/backend/postmaster | |
| parent | f65ab862e3b8d96c6886641155d9447bc73b5126 (diff) | |
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
Diffstat (limited to 'src/backend/postmaster')
| -rw-r--r-- | src/backend/postmaster/autovacuum.c | 13 |
1 files changed, 8 insertions, 5 deletions
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; |
