mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
Measure WaitLatch's timeout parameter in milliseconds, not microseconds.
The original definition had the problem that timeouts exceeding about 2100 seconds couldn't be specified on 32-bit machines. Milliseconds seem like sufficient resolution, and finer grain than that would be fantasy anyway on many platforms. Back-patch to 9.1 so that this aspect of the latch API won't change between 9.1 and later releases. Peter Geoghegan
This commit is contained in:
@ -10161,7 +10161,7 @@ retry:
|
|||||||
/*
|
/*
|
||||||
* Wait for more WAL to arrive, or timeout to be reached
|
* Wait for more WAL to arrive, or timeout to be reached
|
||||||
*/
|
*/
|
||||||
WaitLatch(&XLogCtl->recoveryWakeupLatch, 5000000L);
|
WaitLatch(&XLogCtl->recoveryWakeupLatch, 5000L);
|
||||||
ResetLatch(&XLogCtl->recoveryWakeupLatch);
|
ResetLatch(&XLogCtl->recoveryWakeupLatch);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -134,7 +134,7 @@ DisownLatch(volatile Latch *latch)
|
|||||||
* Wait for given latch to be set or until timeout is exceeded.
|
* Wait for given latch to be set or until timeout is exceeded.
|
||||||
* If the latch is already set, the function returns immediately.
|
* If the latch is already set, the function returns immediately.
|
||||||
*
|
*
|
||||||
* The 'timeout' is given in microseconds, and -1 means wait forever.
|
* The 'timeout' is given in milliseconds, and -1 means wait forever.
|
||||||
* On some platforms, signals cause the timeout to be restarted, so beware
|
* On some platforms, signals cause the timeout to be restarted, so beware
|
||||||
* that the function can sleep for several times longer than the specified
|
* that the function can sleep for several times longer than the specified
|
||||||
* timeout.
|
* timeout.
|
||||||
@ -173,8 +173,8 @@ WaitLatchOrSocket(volatile Latch *latch, pgsocket sock, bool forRead,
|
|||||||
/* Initialize timeout */
|
/* Initialize timeout */
|
||||||
if (timeout >= 0)
|
if (timeout >= 0)
|
||||||
{
|
{
|
||||||
tv.tv_sec = timeout / 1000000L;
|
tv.tv_sec = timeout / 1000L;
|
||||||
tv.tv_usec = timeout % 1000000L;
|
tv.tv_usec = (timeout % 1000L) * 1000L;
|
||||||
tvp = &tv;
|
tvp = &tv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ WaitLatchOrSocket(volatile Latch *latch, pgsocket sock, bool forRead,
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = WaitForMultipleObjects(numevents, events, FALSE,
|
rc = WaitForMultipleObjects(numevents, events, FALSE,
|
||||||
(timeout >= 0) ? (timeout / 1000) : INFINITE);
|
(timeout >= 0) ? timeout : INFINITE);
|
||||||
if (rc == WAIT_FAILED)
|
if (rc == WAIT_FAILED)
|
||||||
elog(ERROR, "WaitForMultipleObjects() failed: error code %d", (int) GetLastError());
|
elog(ERROR, "WaitForMultipleObjects() failed: error code %d", (int) GetLastError());
|
||||||
else if (rc == WAIT_TIMEOUT)
|
else if (rc == WAIT_TIMEOUT)
|
||||||
|
@ -251,7 +251,7 @@ SyncRepWaitForLSN(XLogRecPtr XactCommitLSN)
|
|||||||
* cancel/die signal or postmaster death regularly while waiting. Note
|
* cancel/die signal or postmaster death regularly while waiting. Note
|
||||||
* that timeout here does not necessarily release from loop.
|
* that timeout here does not necessarily release from loop.
|
||||||
*/
|
*/
|
||||||
WaitLatch(&MyProc->waitLatch, 60000000L);
|
WaitLatch(&MyProc->waitLatch, 60000L);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -807,7 +807,7 @@ WalSndLoop(void)
|
|||||||
/* Sleep */
|
/* Sleep */
|
||||||
WaitLatchOrSocket(&MyWalSnd->latch, MyProcPort->sock,
|
WaitLatchOrSocket(&MyWalSnd->latch, MyProcPort->sock,
|
||||||
true, pq_is_send_pending(),
|
true, pq_is_send_pending(),
|
||||||
sleeptime * 1000L);
|
sleeptime);
|
||||||
|
|
||||||
/* Check for replication timeout */
|
/* Check for replication timeout */
|
||||||
if (replication_timeout > 0 &&
|
if (replication_timeout > 0 &&
|
||||||
|
Reference in New Issue
Block a user