Use PostmasterRandom(), not random(), for DSM control segment ID.

Otherwise, every startup gets the same "random" value, which is
definitely not what was intended.
This commit is contained in:
Robert Haas 2016-09-20 12:24:44 -04:00
parent 419113dfdc
commit 470d886c32
3 changed files with 4 additions and 3 deletions

View File

@ -403,7 +403,6 @@ static void processCancelRequest(Port *port, void *pkt);
static int initMasks(fd_set *rmask); static int initMasks(fd_set *rmask);
static void report_fork_failure_to_client(Port *port, int errnum); static void report_fork_failure_to_client(Port *port, int errnum);
static CAC_state canAcceptConnections(void); static CAC_state canAcceptConnections(void);
static long PostmasterRandom(void);
static void RandomSalt(char *salt, int len); static void RandomSalt(char *salt, int len);
static void signal_child(pid_t pid, int signal); static void signal_child(pid_t pid, int signal);
static bool SignalSomeChildren(int signal, int targets); static bool SignalSomeChildren(int signal, int targets);
@ -5101,7 +5100,7 @@ RandomSalt(char *salt, int len)
/* /*
* PostmasterRandom * PostmasterRandom
*/ */
static long long
PostmasterRandom(void) PostmasterRandom(void)
{ {
/* /*

View File

@ -36,6 +36,7 @@
#include "lib/ilist.h" #include "lib/ilist.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "postmaster/postmaster.h"
#include "storage/dsm.h" #include "storage/dsm.h"
#include "storage/ipc.h" #include "storage/ipc.h"
#include "storage/lwlock.h" #include "storage/lwlock.h"
@ -181,7 +182,7 @@ dsm_postmaster_startup(PGShmemHeader *shim)
{ {
Assert(dsm_control_address == NULL); Assert(dsm_control_address == NULL);
Assert(dsm_control_mapped_size == 0); Assert(dsm_control_mapped_size == 0);
dsm_control_handle = random(); dsm_control_handle = (dsm_handle) PostmasterRandom();
if (dsm_control_handle == 0) if (dsm_control_handle == 0)
continue; continue;
if (dsm_impl_op(DSM_OP_CREATE, dsm_control_handle, segsize, if (dsm_impl_op(DSM_OP_CREATE, dsm_control_handle, segsize,

View File

@ -48,6 +48,7 @@ extern const char *progname;
extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn(); extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
extern void ClosePostmasterPorts(bool am_syslogger); extern void ClosePostmasterPorts(bool am_syslogger);
extern long PostmasterRandom(void);
extern int MaxLivePostmasterChildren(void); extern int MaxLivePostmasterChildren(void);