From b4143a6dc0d761fd5330fef6c18092bde4313ed3 Mon Sep 17 00:00:00 2001 From: Reimer Behrends Date: Thu, 12 Apr 2018 10:20:25 +0200 Subject: [PATCH] Properly set randomized priority for treaps. --- src/julia_gc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/julia_gc.c b/src/julia_gc.c index 795c8031ca3..a8e83514a48 100644 --- a/src/julia_gc.c +++ b/src/julia_gc.c @@ -283,6 +283,19 @@ static int treap_delete(treap_t **treap, void *addr) return 0; } +static uint64_t xorshift_rng_state = 1; + +static uint64_t xorshift_rng() +{ + uint64_t x = xorshift_rng_state; + x = x ^ (x >> 12); + x = x ^ (x << 25); + x = x ^ (x >> 27); + xorshift_rng_state = x; + return x * (uint64_t) 0x2545F4914F6CDD1DUL; +} + + static treap_t *bigvals; void *alloc_bigval(size_t size) { @@ -290,6 +303,7 @@ void *alloc_bigval(size_t size) { memset(result, 0, size); treap_t *node = alloc_treap(); node->addr = result; + node->prio = xorshift_rng(); treap_insert(&bigvals, node); return result; }