diff --git a/src/gausskernel/storage/ipc/procarray.cpp b/src/gausskernel/storage/ipc/procarray.cpp index 5e7d069cdab6c4795f84b79c8cc84a9665612db6..926442550492d9a390ab1dc58c2d38eac4f7f438 100644 --- a/src/gausskernel/storage/ipc/procarray.cpp +++ b/src/gausskernel/storage/ipc/procarray.cpp @@ -4054,6 +4054,12 @@ void CalculateLocalLatestSnapshot(bool forceCalc) volatile PGXACT* pgxact = &g_instance.proc_base_all_xacts[pgprocno]; TransactionId xid; + /* Update globalxmin to be the smallest valid xmin */ + xid = pgxact->xmin; /* fetch just once */ + + if (TransactionIdIsNormal(xid) && TransactionIdPrecedes(xid, globalxmin)) + globalxmin = xid; + /* * Backend is doing logical decoding which manages xmin * separately, check below. @@ -4065,12 +4071,6 @@ void CalculateLocalLatestSnapshot(bool forceCalc) if (pgxact->vacuumFlags & PROC_IN_VACUUM) continue; - /* Update globalxmin to be the smallest valid xmin */ - xid = pgxact->xmin; /* fetch just once */ - - if (TransactionIdIsNormal(xid) && TransactionIdPrecedes(xid, globalxmin)) - globalxmin = xid; - /* Fetch xid just once - see GetNewTransactionId */ xid = pgxact->xid;