summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas2016-09-20 16:24:44 +0000
committerRobert Haas2016-09-20 16:26:29 +0000
commit470d886c32efafa1b068b5ca48afafc2198c68d4 (patch)
tree7f6c3226afde1bcee03e53a9f970438e4e2c373a /src
parent419113dfdc4c729f6c763cc30a9b02ee68a7da94 (diff)
Use PostmasterRandom(), not random(), for DSM control segment ID.
Otherwise, every startup gets the same "random" value, which is definitely not what was intended.
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/postmaster.c3
-rw-r--r--src/backend/storage/ipc/dsm.c3
-rw-r--r--src/include/postmaster/postmaster.h1
3 files changed, 4 insertions, 3 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index eaf3f61ecf4..67ccdce7644 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -403,7 +403,6 @@ static void processCancelRequest(Port *port, void *pkt);
static int initMasks(fd_set *rmask);
static void report_fork_failure_to_client(Port *port, int errnum);
static CAC_state canAcceptConnections(void);
-static long PostmasterRandom(void);
static void RandomSalt(char *salt, int len);
static void signal_child(pid_t pid, int signal);
static bool SignalSomeChildren(int signal, int targets);
@@ -5101,7 +5100,7 @@ RandomSalt(char *salt, int len)
/*
* PostmasterRandom
*/
-static long
+long
PostmasterRandom(void)
{
/*
diff --git a/src/backend/storage/ipc/dsm.c b/src/backend/storage/ipc/dsm.c
index d8066647a07..edafe4a3b9f 100644
--- a/src/backend/storage/ipc/dsm.c
+++ b/src/backend/storage/ipc/dsm.c
@@ -36,6 +36,7 @@
#include "lib/ilist.h"
#include "miscadmin.h"
+#include "postmaster/postmaster.h"
#include "storage/dsm.h"
#include "storage/ipc.h"
#include "storage/lwlock.h"
@@ -181,7 +182,7 @@ dsm_postmaster_startup(PGShmemHeader *shim)
{
Assert(dsm_control_address == NULL);
Assert(dsm_control_mapped_size == 0);
- dsm_control_handle = random();
+ dsm_control_handle = (dsm_handle) PostmasterRandom();
if (dsm_control_handle == 0)
continue;
if (dsm_impl_op(DSM_OP_CREATE, dsm_control_handle, segsize,
diff --git a/src/include/postmaster/postmaster.h b/src/include/postmaster/postmaster.h
index b2d7776f2a8..ef06d5d04c4 100644
--- a/src/include/postmaster/postmaster.h
+++ b/src/include/postmaster/postmaster.h
@@ -48,6 +48,7 @@ extern const char *progname;
extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
extern void ClosePostmasterPorts(bool am_syslogger);
+extern long PostmasterRandom(void);
extern int MaxLivePostmasterChildren(void);