Skip to content

Commit b1aed95

Browse files
committed
Use PostmasterRandom(), not random(), for DSM control segment ID.
Otherwise, every startup gets the same "random" value, which is definitely not what was intended.
1 parent c124e36 commit b1aed95

File tree

3 files changed

+4
-3
lines changed

3 files changed

+4
-3
lines changed

src/backend/postmaster/postmaster.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,6 @@ static void processCancelRequest(Port *port, void *pkt);
399399
static int initMasks(fd_set *rmask);
400400
static void report_fork_failure_to_client(Port *port, int errnum);
401401
static CAC_state canAcceptConnections(void);
402-
static long PostmasterRandom(void);
403402
static void RandomSalt(char *md5Salt);
404403
static void signal_child(pid_t pid, int signal);
405404
static bool SignalSomeChildren(int signal, int targets);
@@ -5077,7 +5076,7 @@ RandomSalt(char *md5Salt)
50775076
/*
50785077
* PostmasterRandom
50795078
*/
5080-
static long
5079+
long
50815080
PostmasterRandom(void)
50825081
{
50835082
/*

src/backend/storage/ipc/dsm.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
#include "lib/ilist.h"
3838
#include "miscadmin.h"
39+
#include "postmaster/postmaster.h"
3940
#include "storage/dsm.h"
4041
#include "storage/ipc.h"
4142
#include "storage/lwlock.h"
@@ -179,7 +180,7 @@ dsm_postmaster_startup(PGShmemHeader *shim)
179180
{
180181
Assert(dsm_control_address == NULL);
181182
Assert(dsm_control_mapped_size == 0);
182-
dsm_control_handle = random();
183+
dsm_control_handle = (dsm_handle) PostmasterRandom();
183184
if (dsm_control_handle == 0)
184185
continue;
185186
if (dsm_impl_op(DSM_OP_CREATE, dsm_control_handle, segsize,

src/include/postmaster/postmaster.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ extern const char *progname;
4848

4949
extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
5050
extern void ClosePostmasterPorts(bool am_syslogger);
51+
extern long PostmasterRandom(void);
5152

5253
extern int MaxLivePostmasterChildren(void);
5354

0 commit comments

Comments
 (0)