mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Add real random() call to postmaster for use in cancel.
This commit is contained in:
parent
b952a8491e
commit
556e603b25
@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.80 1998/06/04 17:26:41 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.81 1998/06/08 04:27:59 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
*
|
||||
@ -198,6 +198,12 @@ static sigset_t oldsigmask,
|
||||
static int orgsigmask = sigblock(0);
|
||||
#endif
|
||||
|
||||
static unsigned int random_seed = 0;
|
||||
|
||||
extern char *optarg;
|
||||
extern int optind,
|
||||
opterr;
|
||||
|
||||
|
||||
/*
|
||||
* postmaster.c - function prototypes
|
||||
@ -216,18 +222,14 @@ static int ServerLoop(void);
|
||||
static int BackendStartup(Port *port);
|
||||
static void readStartupPacket(char *arg, PacketLen len, char *pkt);
|
||||
static int initMasks(fd_set *rmask, fd_set *wmask);
|
||||
static long PostmasterRandom(void);
|
||||
static void RandomSalt(char *salt);
|
||||
|
||||
#ifdef CYR_RECODE
|
||||
void GetCharSetByHost(char *, int, char *);
|
||||
void GetCharSetByHost(char *, int, char *);
|
||||
|
||||
#endif
|
||||
|
||||
extern char *optarg;
|
||||
extern int optind,
|
||||
opterr;
|
||||
|
||||
|
||||
|
||||
static void
|
||||
checkDataDir(const char *DataDir, bool *DataDirOK)
|
||||
@ -563,6 +565,10 @@ ServerLoop(void)
|
||||
writemask;
|
||||
int nSockets;
|
||||
Dlelem *curr;
|
||||
struct timeval now, later;
|
||||
struct timezone tz;
|
||||
|
||||
gettimeofday(&now, &tz);
|
||||
|
||||
nSockets = initMasks(&readmask, &writemask);
|
||||
|
||||
@ -596,6 +602,19 @@ ServerLoop(void)
|
||||
return (STATUS_ERROR);
|
||||
}
|
||||
|
||||
if (random_seed == 0)
|
||||
{
|
||||
gettimeofday(&later, &tz);
|
||||
|
||||
/*
|
||||
* We are not sure how much precision is in tv_usec, so we
|
||||
* swap the nibbles of 'later' and XOR them with 'now'
|
||||
*/
|
||||
random_seed = now.tv_usec ^
|
||||
((later.tv_usec << 16) |
|
||||
((unsigned int)(later.tv_usec & 0xffff0000) >> 16));
|
||||
}
|
||||
|
||||
/*
|
||||
* [TRH] To avoid race conditions, block SIGCHLD signals while we
|
||||
* are handling the request. (both reaper() and ConnCreate()
|
||||
@ -1345,19 +1364,28 @@ CharRemap(long int ch)
|
||||
*/
|
||||
static void
|
||||
RandomSalt(char *salt)
|
||||
{
|
||||
long rand = PostmasterRandom();
|
||||
|
||||
*salt = CharRemap(rand % 62);
|
||||
*(salt + 1) = CharRemap(rand / 62);
|
||||
}
|
||||
|
||||
/*
|
||||
* PostmasterRandom
|
||||
*/
|
||||
static long
|
||||
PostmasterRandom(void)
|
||||
{
|
||||
|
||||
static bool initialized = false;
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
time_t now;
|
||||
|
||||
now = time(NULL);
|
||||
srandom((unsigned int) now);
|
||||
Assert(random_seed != 0 && !IsUnderPostmaster);
|
||||
srandom(random_seed);
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
*salt = CharRemap(random());
|
||||
*(salt + 1) = CharRemap(random());
|
||||
return ramdom() ^ random_seed;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user