]> granicus.if.org Git - postgresql/commitdiff
Measure WaitLatch's timeout parameter in milliseconds, not microseconds.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 9 Aug 2011 22:52:35 +0000 (18:52 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 9 Aug 2011 22:52:35 +0000 (18:52 -0400)
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

src/backend/access/transam/xlog.c
src/backend/port/unix_latch.c
src/backend/port/win32_latch.c
src/backend/replication/syncrep.c
src/backend/replication/walsender.c

index eca7a4038dc3da3cea1d3dc9b1b8a70876d1cb25..fc3bed8d3f8d868b90525138552276c1eddd056b 100644 (file)
@@ -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
index 727c5fca8164f7224b19176f5ead5637a4d51b21..047e9def61b083478a27df9848693641715f0d80 100644 (file)
@@ -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;
        }
 
index 3da5085a1a821f401881ee2d1f42d481d0e01769..ccb5771b52bac6123a79af065fdcb3aad4dd1523 100644 (file)
@@ -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)
index 7fcbec24400cb82f72d9943f6c79b23ec198a1db..8713b9700dcf70f5569f8744f23f05ea1aab750e 100644 (file)
@@ -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);
        }
 
        /*
index 7ed13c7e226ac5de9d69f66d136551352201568f..aaa048525b4526c7615535e772710c40188138d7 100644 (file)
@@ -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 &&