summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2016-11-07 18:52:44 (GMT)
committerJason Evans <jasone@canonware.com>2016-11-07 18:52:44 (GMT)
commit04b463546e57ecd9ebc334739881a1c69623813a (patch)
treeaab9e1d85e76d6cea1aa9dde7ea338c3b877f36c /src
parente0a9e78374f56bc7a27258ced08d89bfc436d8af (diff)
downloadjemalloc-04b463546e57ecd9ebc334739881a1c69623813a.zip
jemalloc-04b463546e57ecd9ebc334739881a1c69623813a.tar.gz
jemalloc-04b463546e57ecd9ebc334739881a1c69623813a.tar.bz2
Refactor prng to not use 64-bit atomics on 32-bit platforms.
This resolves #495.
Diffstat (limited to 'src')
-rw-r--r--src/arena.c6
-rw-r--r--src/ckh.c8
-rw-r--r--src/prof.c2
3 files changed, 8 insertions, 8 deletions
diff --git a/src/arena.c b/src/arena.c
index dd8e4d9..4b104a0 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -422,8 +422,8 @@ arena_decay_deadline_init(arena_t *arena)
if (arena->decay.time > 0) {
nstime_t jitter;
- nstime_init(&jitter, prng_range(&arena->decay.jitter_state,
- nstime_ns(&arena->decay.interval), false));
+ nstime_init(&jitter, prng_range_u64(&arena->decay.jitter_state,
+ nstime_ns(&arena->decay.interval)));
nstime_add(&arena->decay.deadline, &jitter);
}
}
@@ -1680,7 +1680,7 @@ arena_new(tsdn_t *tsdn, unsigned ind)
* deterministic seed.
*/
arena->offset_state = config_debug ? ind :
- (uint64_t)(uintptr_t)arena;
+ (size_t)(uintptr_t)arena;
}
arena->dss_prec = extent_dss_prec_get();
diff --git a/src/ckh.c b/src/ckh.c
index 7537601..6f16565 100644
--- a/src/ckh.c
+++ b/src/ckh.c
@@ -99,8 +99,8 @@ ckh_try_bucket_insert(ckh_t *ckh, size_t bucket, const void *key,
* Cycle through the cells in the bucket, starting at a random position.
* The randomness avoids worst-case search overhead as buckets fill up.
*/
- offset = (unsigned)prng_lg_range(&ckh->prng_state, LG_CKH_BUCKET_CELLS,
- false);
+ offset = (unsigned)prng_lg_range_u64(&ckh->prng_state,
+ LG_CKH_BUCKET_CELLS);
for (i = 0; i < (ZU(1) << LG_CKH_BUCKET_CELLS); i++) {
cell = &ckh->tab[(bucket << LG_CKH_BUCKET_CELLS) +
((i + offset) & ((ZU(1) << LG_CKH_BUCKET_CELLS) - 1))];
@@ -142,8 +142,8 @@ ckh_evict_reloc_insert(ckh_t *ckh, size_t argbucket, void const **argkey,
* were an item for which both hashes indicated the same
* bucket.
*/
- i = (unsigned)prng_lg_range(&ckh->prng_state,
- LG_CKH_BUCKET_CELLS, false);
+ i = (unsigned)prng_lg_range_u64(&ckh->prng_state,
+ LG_CKH_BUCKET_CELLS);
cell = &ckh->tab[(bucket << LG_CKH_BUCKET_CELLS) + i];
assert(cell->key != NULL);
diff --git a/src/prof.c b/src/prof.c
index 4bafb39..19c8fb7 100644
--- a/src/prof.c
+++ b/src/prof.c
@@ -878,7 +878,7 @@ prof_sample_threshold_update(prof_tdata_t *tdata)
* pp 500
* (http://luc.devroye.org/rnbookindex.html)
*/
- r = prng_lg_range(&tdata->prng_state, 53, false);
+ r = prng_lg_range_u64(&tdata->prng_state, 53);
u = (double)r * (1.0/9007199254740992.0L);
tdata->bytes_until_sample = (uint64_t)(log(u) /
log(1.0 - (1.0 / (double)((uint64_t)1U << lg_prof_sample))))