]> granicus.if.org Git - postgresql/commitdiff
Use PostmasterRandom(), not random(), for DSM control segment ID.
authorRobert Haas <rhaas@postgresql.org>
Tue, 20 Sep 2016 16:24:44 +0000 (12:24 -0400)
committerRobert Haas <rhaas@postgresql.org>
Tue, 20 Sep 2016 16:26:29 +0000 (12:26 -0400)
Otherwise, every startup gets the same "random" value, which is
definitely not what was intended.

src/backend/postmaster/postmaster.c
src/backend/storage/ipc/dsm.c
src/include/postmaster/postmaster.h

index eaf3f61ecf43fcede4f27ad2b4cf99adfe2e64e5..67ccdce764454244e338ce1314a1cd7a81a78747 100644 (file)
@@ -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)
 {
        /*
index d8066647a07598b63188635d167a8e6ab8ba96f5..edafe4a3b9f3e0d69a02b83e1afd29a589546bf3 100644 (file)
@@ -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,
index b2d7776f2a8c74a6dcc0ff84a95c57928f25fcdb..ef06d5d04c45ac573e907f75a362517d0a492575 100644 (file)
@@ -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);