Skip to content

Commit

Permalink
print query map for deadlock when using parallel front end
Browse files Browse the repository at this point in the history
  • Loading branch information
SparrowLii committed Nov 22, 2023
1 parent 650991d commit e4c843f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
16 changes: 11 additions & 5 deletions compiler/rustc_query_system/src/query/job.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub struct QueryInfo {
pub type QueryMap = FxHashMap<QueryJobId, QueryJobInfo>;

/// A value uniquely identifying an active query job.
#[derive(Copy, Clone, Eq, PartialEq, Hash)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct QueryJobId(pub NonZeroU64);

impl QueryJobId {
Expand All @@ -62,14 +62,14 @@ impl QueryJobId {
}
}

#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct QueryJobInfo {
pub query: QueryStackFrame,
pub job: QueryJob,
}

/// Represents an active query job.
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct QueryJob {
pub id: QueryJobId,

Expand Down Expand Up @@ -182,6 +182,7 @@ impl QueryJobId {
}

#[cfg(parallel_compiler)]
#[derive(Debug)]
struct QueryWaiter {
query: Option<QueryJobId>,
condvar: Condvar,
Expand All @@ -198,13 +199,14 @@ impl QueryWaiter {
}

#[cfg(parallel_compiler)]
#[derive(Debug)]
struct QueryLatchInfo {
complete: bool,
waiters: Vec<Arc<QueryWaiter>>,
}

#[cfg(parallel_compiler)]
#[derive(Clone)]
#[derive(Clone, Debug)]
pub(super) struct QueryLatch {
info: Arc<Mutex<QueryLatchInfo>>,
}
Expand Down Expand Up @@ -540,7 +542,11 @@ pub fn deadlock(query_map: QueryMap, registry: &rayon_core::Registry) {
// X to Y due to Rayon waiting and a true dependency from Y to X. The algorithm here
// only considers the true dependency and won't detect a cycle.
if !found_cycle {
panic!("deadlock detected");
if query_map.len() == 0 {
panic!("deadlock detected without any query!")
} else {
panic!("deadlock detected! current query map:\n{:?}", query_map);
}
}

// FIXME: Ensure this won't cause a deadlock before we return
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_query_system/src/query/plumbing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ where
}
}

#[derive(Clone)]
#[derive(Clone, Debug)]
pub(crate) struct CycleError {
/// The query and related span that uses the cycle.
pub usage: Option<(Span, QueryStackFrame)>,
Expand Down

0 comments on commit e4c843f

Please sign in to comment.