diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2011-08-09 18:52:35 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2011-08-09 18:52:35 -0400 |
commit | 74d099494c5853a44188316ba117a8909b299d40 (patch) | |
tree | aa2fbacddea1adff84819e1d752a1b4a29881c1b | |
parent | 6760a4d4029121981bf3ec24847ddfbacecc070d (diff) | |
download | postgresql-74d099494c5853a44188316ba117a8909b299d40.tar.gz postgresql-74d099494c5853a44188316ba117a8909b299d40.zip |
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
-rw-r--r-- | src/backend/access/transam/xlog.c | 2 | ||||
-rw-r--r-- | src/backend/port/unix_latch.c | 6 | ||||
-rw-r--r-- | src/backend/port/win32_latch.c | 2 | ||||
-rw-r--r-- | src/backend/replication/syncrep.c | 2 | ||||
-rw-r--r-- | src/backend/replication/walsender.c | 2 |
5 files changed, 7 insertions, 7 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index eca7a4038dc..fc3bed8d3f8 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -10161,7 +10161,7 @@ retry: /* * Wait for more WAL to arrive, or timeout to be reached */ - WaitLatch(&XLogCtl->recoveryWakeupLatch, 5000000L); + WaitLatch(&XLogCtl->recoveryWakeupLatch, 5000L); ResetLatch(&XLogCtl->recoveryWakeupLatch); } else diff --git a/src/backend/port/unix_latch.c b/src/backend/port/unix_latch.c index 727c5fca816..047e9def61b 100644 --- a/src/backend/port/unix_latch.c +++ b/src/backend/port/unix_latch.c @@ -134,7 +134,7 @@ DisownLatch(volatile Latch *latch) * Wait for given latch to be set or until timeout is exceeded. * 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 * that the function can sleep for several times longer than the specified * timeout. @@ -173,8 +173,8 @@ WaitLatchOrSocket(volatile Latch *latch, pgsocket sock, bool forRead, /* Initialize timeout */ if (timeout >= 0) { - tv.tv_sec = timeout / 1000000L; - tv.tv_usec = timeout % 1000000L; + tv.tv_sec = timeout / 1000L; + tv.tv_usec = (timeout % 1000L) * 1000L; tvp = &tv; } diff --git a/src/backend/port/win32_latch.c b/src/backend/port/win32_latch.c index 3da5085a1a8..ccb5771b52b 100644 --- a/src/backend/port/win32_latch.c +++ b/src/backend/port/win32_latch.c @@ -137,7 +137,7 @@ WaitLatchOrSocket(volatile Latch *latch, pgsocket sock, bool forRead, } rc = WaitForMultipleObjects(numevents, events, FALSE, - (timeout >= 0) ? (timeout / 1000) : INFINITE); + (timeout >= 0) ? timeout : INFINITE); if (rc == WAIT_FAILED) elog(ERROR, "WaitForMultipleObjects() failed: error code %d", (int) GetLastError()); else if (rc == WAIT_TIMEOUT) diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index 7fcbec24400..8713b9700dc 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -251,7 +251,7 @@ SyncRepWaitForLSN(XLogRecPtr XactCommitLSN) * cancel/die signal or postmaster death regularly while waiting. Note * that timeout here does not necessarily release from loop. */ - WaitLatch(&MyProc->waitLatch, 60000000L); + WaitLatch(&MyProc->waitLatch, 60000L); } /* diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 7ed13c7e226..aaa048525b4 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -807,7 +807,7 @@ WalSndLoop(void) /* Sleep */ WaitLatchOrSocket(&MyWalSnd->latch, MyProcPort->sock, true, pq_is_send_pending(), - sleeptime * 1000L); + sleeptime); /* Check for replication timeout */ if (replication_timeout > 0 && |