1
0
mirror of https://github.com/postgres/postgres.git synced 2025-10-19 15:49:24 +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:
Tom Lane
2011-08-09 18:52:29 -04:00
parent 4e15a4db5e
commit 9f17ffd866
6 changed files with 15 additions and 15 deletions

View File

@@ -99,7 +99,6 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
int numevents;
int result = 0;
int pmdeath_eventno = 0;
long timeout_ms;
/* Ignore WL_SOCKET_* events if no valid socket is given */
if (sock == PGINVALID_SOCKET)
@@ -110,14 +109,11 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
if ((wakeEvents & WL_LATCH_SET) && latch->owner_pid != MyProcPid)
elog(ERROR, "cannot wait on a latch owned by another process");
/* Convert timeout to milliseconds for WaitForMultipleObjects() */
/* Convert timeout to form used by WaitForMultipleObjects() */
if (wakeEvents & WL_TIMEOUT)
{
Assert(timeout >= 0);
timeout_ms = timeout / 1000;
}
else
timeout_ms = INFINITE;
timeout = INFINITE;
/* Construct an array of event handles for WaitforMultipleObjects() */
latchevent = latch->event;
@@ -165,7 +161,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
break;
}
rc = WaitForMultipleObjects(numevents, events, FALSE, timeout_ms);
rc = WaitForMultipleObjects(numevents, events, FALSE, timeout);
if (rc == WAIT_FAILED)
elog(ERROR, "WaitForMultipleObjects() failed: error code %d", (int) GetLastError());