mirror of
https://github.com/postgres/postgres.git
synced 2025-07-18 17:42:25 +03:00
Centralize implementation of delay code by creating a pg_usleep()
subroutine in src/port/pgsleep.c. Remove platform dependencies from miscadmin.h and put them in port.h where they belong. Extend recent vacuum cost-based-delay patch to apply to VACUUM FULL, ANALYZE, and non-btree index vacuuming. By the way, where is the documentation for the cost-based-delay patch?
This commit is contained in:
42
src/port/pgsleep.c
Normal file
42
src/port/pgsleep.c
Normal file
@ -0,0 +1,42 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* pgsleep.c
|
||||
* Portable delay handling.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/port/pgsleep.c,v 1.1 2004/02/10 03:42:45 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
|
||||
/*
|
||||
* 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), TRUE);
|
||||
#endif
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user