mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Don't recompute key_hash in wait_for_query.
We compute `key_hash` in `try_execute_query`, so we can just pass the value in.
This commit is contained in:
@@ -240,6 +240,7 @@ fn wait_for_query<'tcx, C: QueryCache>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
span: Span,
|
||||
key: C::Key,
|
||||
key_hash: u64,
|
||||
latch: QueryLatch<'tcx>,
|
||||
current: Option<QueryJobId>,
|
||||
) -> (C::Value, Option<DepNodeIndex>) {
|
||||
@@ -248,8 +249,7 @@ fn wait_for_query<'tcx, C: QueryCache>(
|
||||
// self-profiler.
|
||||
let query_blocked_prof_timer = tcx.prof.query_blocked();
|
||||
|
||||
// With parallel queries we might just have to wait on some other
|
||||
// thread.
|
||||
// With parallel queries we might just have to wait on some other thread.
|
||||
let result = latch.wait_on(tcx, current, span);
|
||||
|
||||
match result {
|
||||
@@ -258,7 +258,6 @@ fn wait_for_query<'tcx, C: QueryCache>(
|
||||
outline(|| {
|
||||
// We didn't find the query result in the query cache. Check if it was
|
||||
// poisoned due to a panic instead.
|
||||
let key_hash = sharded::make_hash(&key);
|
||||
let shard = query.state.active.lock_shard_by_hash(key_hash);
|
||||
match shard.find(key_hash, equivalent_key(key)) {
|
||||
// The query we waited on panicked. Continue unwinding here.
|
||||
@@ -311,8 +310,8 @@ fn try_execute_query<'tcx, C: QueryCache, const INCR: bool>(
|
||||
|
||||
match state_lock.entry(key_hash, equivalent_key(key), |(k, _)| sharded::make_hash(k)) {
|
||||
Entry::Vacant(entry) => {
|
||||
// Nothing has computed or is computing the query, so we start a new job and insert it in the
|
||||
// state map.
|
||||
// Nothing has computed or is computing the query, so we start a new job and insert it
|
||||
// in the state map.
|
||||
let id = next_job_id(tcx);
|
||||
let job = QueryJob::new(id, span, current_job_id);
|
||||
entry.insert((key, ActiveKeyStatus::Started(job)));
|
||||
@@ -332,7 +331,7 @@ fn try_execute_query<'tcx, C: QueryCache, const INCR: bool>(
|
||||
|
||||
// Only call `wait_for_query` if we're using a Rayon thread pool
|
||||
// as it will attempt to mark the worker thread as blocked.
|
||||
wait_for_query(query, tcx, span, key, latch, current_job_id)
|
||||
wait_for_query(query, tcx, span, key, key_hash, latch, current_job_id)
|
||||
} else {
|
||||
let id = job.id;
|
||||
drop(state_lock);
|
||||
|
||||
Reference in New Issue
Block a user