Skip to content

Commit

Permalink
Revert "std: Cache HashMap keys in TLS"
Browse files Browse the repository at this point in the history
This reverts commit eaeef3d.

This is a short-term workaround to rust-lang#36481.
  • Loading branch information
sfackler committed Sep 18, 2016
1 parent 22d15ea commit 68210a1
Showing 1 changed file with 2 additions and 27 deletions.
29 changes: 2 additions & 27 deletions src/libstd/collections/hash/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1963,33 +1963,8 @@ impl RandomState {
#[allow(deprecated)] // rand
#[stable(feature = "hashmap_build_hasher", since = "1.7.0")]
pub fn new() -> RandomState {
// Historically this function did not cache keys from the OS and instead
// simply always called `rand::thread_rng().gen()` twice. In #31356 it
// was discovered, however, that because we re-seed the thread-local RNG
// from the OS periodically that this can cause excessive slowdown when
// many hash maps are created on a thread. To solve this performance
// trap we cache the first set of randomly generated keys per-thread.
//
// In doing this, however, we lose the property that all hash maps have
// nondeterministic iteration order as all of those created on the same
// thread would have the same hash keys. This property has been nice in
// the past as it allows for maximal flexibility in the implementation
// of `HashMap` itself.
//
// The constraint here (if there even is one) is just that maps created
// on the same thread have the same iteration order, and that *may* be
// relied upon even though it is not a documented guarantee at all of
// the `HashMap` type. In any case we've decided that this is reasonable
// for now, so caching keys thread-locally seems fine.
thread_local!(static KEYS: (u64, u64) = {
let r = rand::OsRng::new();
let mut r = r.expect("failed to create an OS RNG");
(r.gen(), r.gen())
});

KEYS.with(|&(k0, k1)| {
RandomState { k0: k0, k1: k1 }
})
let mut r = rand::thread_rng();
RandomState { k0: r.gen(), k1: r.gen() }
}
}

Expand Down

0 comments on commit 68210a1

Please sign in to comment.