aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/access/transam/xlog.c3
-rw-r--r--src/backend/storage/ipc/procarray.c30
2 files changed, 14 insertions, 19 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 0a573f7f65c..7210ca5fddb 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -6984,12 +6984,9 @@ CreateCheckPoint(int flags)
vxids = GetVirtualXIDsDelayingChkpt(&nvxids);
if (nvxids > 0)
{
- uint32 nwaits = 0;
-
do
{
pg_usleep(10000L); /* wait for 10 msec */
- nwaits++;
} while (HaveVirtualXIDsDelayingChkpt(vxids, nvxids));
}
pfree(vxids);
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index 8605fe76707..b5f66fbfb04 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -1849,32 +1849,30 @@ HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, int nvxids)
LWLockAcquire(ProcArrayLock, LW_SHARED);
- while (VirtualTransactionIdIsValid(*vxids))
+ for (index = 0; index < arrayP->numProcs; index++)
{
- for (index = 0; index < arrayP->numProcs; index++)
+ int pgprocno = arrayP->pgprocnos[index];
+ volatile PGPROC *proc = &allProcs[pgprocno];
+ volatile PGXACT *pgxact = &allPgXact[pgprocno];
+ VirtualTransactionId vxid;
+
+ GET_VXID_FROM_PGPROC(vxid, *proc);
+
+ if (pgxact->delayChkpt && VirtualTransactionIdIsValid(vxid))
{
- int pgprocno = arrayP->pgprocnos[index];
- volatile PGPROC *proc = &allProcs[pgprocno];
- volatile PGXACT *pgxact = &allPgXact[pgprocno];
- VirtualTransactionId vxid;
+ int i;
- GET_VXID_FROM_PGPROC(vxid, *proc);
- if (VirtualTransactionIdIsValid(vxid))
+ for (i = 0; i < nvxids; i++)
{
- if (VirtualTransactionIdEquals(vxid, *vxids) &&
- pgxact->delayChkpt)
+ if (VirtualTransactionIdEquals(vxid, vxids[i]))
{
result = true;
break;
}
}
+ if (result)
+ break;
}
-
- if (result)
- break;
-
- /* The virtual transaction is gone now, wait for the next one */
- vxids++;
}
LWLockRelease(ProcArrayLock);