}
else
{
+ SetLatestCompletedXid(latestCompletedXid);
ClusterMonitorSetReportedGlobalXmin(oldestXmin);
elog(DEBUG2, "Updating global_xmin to %d", newOldestXmin);
if (GlobalTransactionIdIsValid(newOldestXmin))
if (!TransactionIdIsValid(latestCompletedXid))
return;
- LWLockAcquire(XidGenLock, LW_EXCLUSIVE);
+ LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE);
if (TransactionIdPrecedes(latestCompletedXid,
ShmemVariableCache->latestCompletedXid))
volatile PGXACT *pgxact = &allPgXact[pgprocno];
TransactionId pxid = pgxact->xid;
+ if (!TransactionIdIsValid(pxid))
+ continue;
+
if (TransactionIdPrecedesOrEquals(pxid, latestCompletedXid))
elog(PANIC, "Cannot set latestCompletedXid to %d while another "
"process is running with an older xid %d",