mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	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:
		@@ -400,7 +400,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 *md5Salt);
 | 
					static void RandomSalt(char *md5Salt);
 | 
				
			||||||
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);
 | 
				
			||||||
@@ -5127,7 +5126,7 @@ RandomSalt(char *md5Salt)
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * PostmasterRandom
 | 
					 * PostmasterRandom
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static long
 | 
					long
 | 
				
			||||||
PostmasterRandom(void)
 | 
					PostmasterRandom(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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"
 | 
				
			||||||
@@ -179,7 +180,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;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern void PostmasterMain(int argc, char *argv[]) __attribute__((noreturn));
 | 
					extern void PostmasterMain(int argc, char *argv[]) __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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user