Commit fb435f40 authored by Noah Misch's avatar Noah Misch

Observe array length in HaveVirtualXIDsDelayingChkpt().

Since commit f21bb9cf, this function
ignores the caller-provided length and loops until it finds a
terminator, which GetVirtualXIDsDelayingChkpt() never adds.  Restore the
previous loop control logic.  In passing, revert the addition of an
unused variable by the same commit, presumably a debugging relic.
parent ff53890f
......@@ -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);
......
......@@ -1849,8 +1849,6 @@ HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, int nvxids)
LWLockAcquire(ProcArrayLock, LW_SHARED);
while (VirtualTransactionIdIsValid(*vxids))
{
for (index = 0; index < arrayP->numProcs; index++)
{
int pgprocno = arrayP->pgprocnos[index];
......@@ -1859,22 +1857,22 @@ HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, int nvxids)
VirtualTransactionId vxid;
GET_VXID_FROM_PGPROC(vxid, *proc);
if (VirtualTransactionIdIsValid(vxid))
if (pgxact->delayChkpt && VirtualTransactionIdIsValid(vxid))
{
int i;
for (i = 0; i < nvxids; i++)
{
if (VirtualTransactionIdEquals(vxid, *vxids) &&
pgxact->delayChkpt)
if (VirtualTransactionIdEquals(vxid, vxids[i]))
{
result = true;
break;
}
}
}
if (result)
break;
/* The virtual transaction is gone now, wait for the next one */
vxids++;
}
}
LWLockRelease(ProcArrayLock);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment