OSDN Git Service

XOR process PID into a backend's initial random seed, to ensure that
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 7 Oct 2004 00:03:15 +0000 (00:03 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 7 Oct 2004 00:03:15 +0000 (00:03 +0000)
different backends get a reasonably wide set of initial seeds even if
gettimeofday returns tv_usec values with only a few bits of precision.
Per recent discussion.

src/backend/postmaster/postmaster.c

index 34d7148..3fa5409 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.426 2004/10/06 09:35:21 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.427 2004/10/07 00:03:15 tgl Exp $
  *
  * NOTES
  *
@@ -2575,8 +2575,6 @@ static int
 BackendRun(Port *port)
 {
        int                     status;
-       struct timeval now;
-       struct timezone tz;
        char            remote_host[NI_MAXHOST];
        char            remote_port[NI_MAXSERV];
        char            remote_ps_data[NI_MAXHOST];
@@ -2754,9 +2752,7 @@ BackendRun(Port *port)
         * start a new random sequence in the random() library function.
         */
        random_seed = 0;
-       gettimeofday(&now, &tz);
-       srandom((unsigned int) now.tv_usec);
-
+       srandom((unsigned int) (MyProcPid ^ port->session_start.tv_usec));
 
        /* ----------------
         * Now, build the argv vector that will be given to PostgresMain.