mirror of
https://github.com/postgres/postgres.git
synced 2025-06-03 01:21:48 +03:00
<sys/select.h> is required by POSIX.1-2001 to get the prototype of select(2), but nearly no systems enforce that because older standards let you get away with including some other headers. Recent OpenBSD hacking has removed that frail touch of friendliness, however, which broke some compiles; fix all the way back to 9.1 by adding the required standard. Only vacuumdb.c was reported to fail, but it seems easier to fix the whole lot in a fell swoop. Per bug #14334 by Sean Farrell.
54 lines
1.3 KiB
C
54 lines
1.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* pgsleep.c
|
|
* Portable delay handling.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2013, PostgreSQL Global Development Group
|
|
*
|
|
* src/port/pgsleep.c
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#include "c.h"
|
|
|
|
#include <unistd.h>
|
|
#include <sys/time.h>
|
|
#ifdef HAVE_SYS_SELECT_H
|
|
#include <sys/select.h>
|
|
#endif
|
|
|
|
/*
|
|
* In a Windows backend, we don't use this implementation, but rather
|
|
* the signal-aware version in src/backend/port/win32/signal.c.
|
|
*/
|
|
#if defined(FRONTEND) || !defined(WIN32)
|
|
|
|
/*
|
|
* pg_usleep --- delay the specified number of microseconds.
|
|
*
|
|
* NOTE: although the delay is specified in microseconds, the effective
|
|
* resolution is only 1/HZ, or 10 milliseconds, on most Unixen. Expect
|
|
* the requested delay to be rounded up to the next resolution boundary.
|
|
*
|
|
* On machines where "long" is 32 bits, the maximum delay is ~2000 seconds.
|
|
*/
|
|
void
|
|
pg_usleep(long microsec)
|
|
{
|
|
if (microsec > 0)
|
|
{
|
|
#ifndef WIN32
|
|
struct timeval delay;
|
|
|
|
delay.tv_sec = microsec / 1000000L;
|
|
delay.tv_usec = microsec % 1000000L;
|
|
(void) select(0, NULL, NULL, NULL, &delay);
|
|
#else
|
|
SleepEx((microsec < 500 ? 1 : (microsec + 500) / 1000), FALSE);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#endif /* defined(FRONTEND) || !defined(WIN32) */
|