mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Assert that WaitLatch's timeout is not more than INT_MAX milliseconds.
The behavior with larger values is unspecified by the Single Unix Spec. It appears that BSD-derived kernels report EINVAL, although Linux does not. If waiting for longer intervals is desired, the calling code has to do something to limit the delay; we can't portably fix it here since "long" may not be any wider than "int" in the first place. Part of response to bug #7670, though this change doesn't fix that (in fact, it converts the problem from an ERROR into an Assert failure). No back-patch since it's just an assertion addition.
This commit is contained in:
parent
6b6633ad6c
commit
14ddff44c2
@ -33,6 +33,7 @@
|
||||
#include "postgres.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
@ -176,9 +177,10 @@ DisownLatch(volatile Latch *latch)
|
||||
* to wait for. If the latch is already set (and WL_LATCH_SET is given), the
|
||||
* function returns immediately.
|
||||
*
|
||||
* The 'timeout' is given in milliseconds. It must be >= 0 if WL_TIMEOUT flag
|
||||
* is given. Note that some extra overhead is incurred when WL_TIMEOUT is
|
||||
* given, so avoid using a timeout if possible.
|
||||
* The "timeout" is given in milliseconds. It must be >= 0 if WL_TIMEOUT flag
|
||||
* is given. Although it is declared as "long", we don't actually support
|
||||
* timeouts longer than INT_MAX milliseconds. Note that some extra overhead
|
||||
* is incurred when WL_TIMEOUT is given, so avoid using a timeout if possible.
|
||||
*
|
||||
* The latch must be owned by the current process, ie. it must be a
|
||||
* backend-local latch initialized with InitLatch, or a shared latch
|
||||
@ -243,7 +245,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
|
||||
if (wakeEvents & WL_TIMEOUT)
|
||||
{
|
||||
INSTR_TIME_SET_CURRENT(start_time);
|
||||
Assert(timeout >= 0);
|
||||
Assert(timeout >= 0 && timeout <= INT_MAX);
|
||||
cur_timeout = timeout;
|
||||
|
||||
#ifndef HAVE_POLL
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "postgres.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@ -130,7 +131,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
|
||||
if (wakeEvents & WL_TIMEOUT)
|
||||
{
|
||||
INSTR_TIME_SET_CURRENT(start_time);
|
||||
Assert(timeout >= 0);
|
||||
Assert(timeout >= 0 && timeout <= INT_MAX);
|
||||
cur_timeout = timeout;
|
||||
}
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user