aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2016-09-20 12:24:44 -0400
committerRobert Haas <rhaas@postgresql.org>2016-09-20 12:28:02 -0400
commit92668cd4d3df5a7a48408fc722e876a3e1c167d9 (patch)
tree6cafc8a5a41a969e491ba4c7850ddb8d081eb95c /src
parent6bcd26c43c4f0ef718e984643338ddd5b207f9f9 (diff)
downloadpostgresql-92668cd4d3df5a7a48408fc722e876a3e1c167d9.tar.gz
postgresql-92668cd4d3df5a7a48408fc722e876a3e1c167d9.zip
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 7e21e78ded4..6b9a2edac0e 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 *md5Salt);
static void signal_child(pid_t pid, int signal);
static bool SignalSomeChildren(int signal, int targets);
@@ -5103,7 +5102,7 @@ RandomSalt(char *md5Salt)
/*
* PostmasterRandom
*/
-static long
+long
PostmasterRandom(void)
{
/*
diff --git a/src/backend/storage/ipc/dsm.c b/src/backend/storage/ipc/dsm.c
index 47f2bea0be3..0a817ac3212 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"
@@ -179,7 +180,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);