summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-08-09 18:52:35 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-08-09 18:52:35 -0400
commit74d099494c5853a44188316ba117a8909b299d40 (patch)
treeaa2fbacddea1adff84819e1d752a1b4a29881c1b
parent6760a4d4029121981bf3ec24847ddfbacecc070d (diff)
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.c2
-rw-r--r--src/backend/port/unix_latch.c6
-rw-r--r--src/backend/port/win32_latch.c2
-rw-r--r--src/backend/replication/syncrep.c2
-rw-r--r--src/backend/replication/walsender.c2
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 &&