Commit 470d886c authored by Robert Haas's avatar Robert Haas

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

Otherwise, every startup gets the same "random" value, which is
definitely not what was intended.
parent 419113df
...@@ -403,7 +403,6 @@ static void processCancelRequest(Port *port, void *pkt); ...@@ -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) ...@@ -5101,7 +5100,7 @@ RandomSalt(char *salt, int len)
/* /*
* PostmasterRandom * PostmasterRandom
*/ */
static long long
PostmasterRandom(void) PostmasterRandom(void)
{ {
/* /*
......
...@@ -36,6 +36,7 @@ ...@@ -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) ...@@ -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,
......
...@@ -48,6 +48,7 @@ extern const char *progname; ...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment