summaryrefslogtreecommitdiff
path: root/dbg_mlc.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbg_mlc.c')
-rw-r--r--dbg_mlc.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/dbg_mlc.c b/dbg_mlc.c
index b333a128..1ffee0f4 100644
--- a/dbg_mlc.c
+++ b/dbg_mlc.c
@@ -54,23 +54,20 @@
}
#endif /* !SHORT_DBG_HDRS */
+#ifdef KEEP_BACK_PTRS
+
#ifdef LINT2
- long GC_random(void)
+ static int GC_rand(void)
{
- static unsigned seed = 1; /* not thread-safe */
+ static GC_RAND_STATE_T seed;
- /* Linear congruential pseudo-random numbers generator. */
- seed = (seed * 1103515245U + 12345) & GC_RAND_MAX; /* overflow is ok */
- return (long)seed;
+ return GC_RAND_NEXT(&seed);
}
-#endif
-#ifdef KEEP_BACK_PTRS
-
-#ifdef LINT2
-# define RANDOM() GC_random()
+# define RANDOM() (long)GC_rand()
#else
# include <stdlib.h>
+# undef GC_RAND_MAX
# define GC_RAND_MAX RAND_MAX
# if defined(__GLIBC__) || defined(SOLARIS) \
@@ -163,16 +160,17 @@
GC_API void * GC_CALL GC_generate_random_heap_address(void)
{
size_t i;
- word heap_offset = RANDOM();
+ word heap_offset = (word)RANDOM();
- if (GC_heapsize > GC_RAND_MAX) {
+ if (GC_heapsize > (word)GC_RAND_MAX) {
heap_offset *= GC_RAND_MAX;
- heap_offset += RANDOM();
+ heap_offset += (word)RANDOM();
}
heap_offset %= GC_heapsize;
/* This doesn't yield a uniform distribution, especially if */
- /* e.g. RAND_MAX = 1.5* GC_heapsize. But for typical cases, */
+ /* e.g. RAND_MAX is 1.5*GC_heapsize. But for typical cases, */
/* it's not too bad. */
+
for (i = 0;; ++i) {
size_t size;