aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/misc.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-06-09 19:20:59 +0000
committerBruce Momjian <bruce@momjian.us>1998-06-09 19:20:59 +0000
commit755c00a3604b3de3dc02daf880e79142c00bc9ca (patch)
treeb118ded322a1dfcb3fd2b230297cb6224d8e6b57 /src/backend/utils/adt/misc.c
parent19a95d9742853e09333436a8a23b4c2beb1be797 (diff)
downloadpostgresql-755c00a3604b3de3dc02daf880e79142c00bc9ca.tar.gz
postgresql-755c00a3604b3de3dc02daf880e79142c00bc9ca.zip
Auto-seed random so user's can't request random values based on
our postmaster random seed used from cancel.
Diffstat (limited to 'src/backend/utils/adt/misc.c')
-rw-r--r--src/backend/utils/adt/misc.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c
index 6913d8975e4..d91ea44e951 100644
--- a/src/backend/utils/adt/misc.c
+++ b/src/backend/utils/adt/misc.c
@@ -7,12 +7,13 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/misc.c,v 1.12 1998/02/24 03:47:26 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/misc.c,v 1.13 1998/06/09 19:20:59 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include <sys/types.h>
#include <sys/file.h>
+#include <time.h>
#include "postgres.h"
#include "utils/datum.h"
#include "catalog/pg_type.h"
@@ -60,6 +61,9 @@ nonnullvalue(Datum value, bool *isNull)
* will return about 1/10 of the tuples in TEMP
*
*/
+
+static bool random_initialized = false;
+
bool
oidrand(Oid o, int32 X)
{
@@ -68,6 +72,17 @@ oidrand(Oid o, int32 X)
if (X == 0)
return true;
+ /*
+ * We do this because the cancel key is actually a random, so we don't
+ * want them to be able to request random numbers using our postmaster
+ * seeded value.
+ */
+ if (!random_initialized)
+ {
+ srandom((unsigned int)time(NULL));
+ random_initialized = true;
+ }
+
result = (random() % X == 0);
return result;
}
@@ -81,6 +96,7 @@ bool
oidsrand(int32 X)
{
srand(X);
+ random_initialized = true;
return true;
}