mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-21 20:23:21 +00:00
replace few explicit use of parking_lot with rustc_data_structures::sync onces
This commit is contained in:
parent
383b715163
commit
e3700953c1
@ -1,4 +1,3 @@
|
|||||||
use parking_lot::Mutex;
|
|
||||||
use rustc_data_structures::fingerprint::Fingerprint;
|
use rustc_data_structures::fingerprint::Fingerprint;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
||||||
use rustc_data_structures::profiling::{EventId, QueryInvocationId, SelfProfilerRef};
|
use rustc_data_structures::profiling::{EventId, QueryInvocationId, SelfProfilerRef};
|
||||||
@ -88,7 +87,7 @@ pub struct DepGraphData<K: DepKind> {
|
|||||||
|
|
||||||
colors: DepNodeColorMap,
|
colors: DepNodeColorMap,
|
||||||
|
|
||||||
processed_side_effects: Mutex<FxHashSet<DepNodeIndex>>,
|
processed_side_effects: Lock<FxHashSet<DepNodeIndex>>,
|
||||||
|
|
||||||
/// When we load, there may be `.o` files, cached MIR, or other such
|
/// When we load, there may be `.o` files, cached MIR, or other such
|
||||||
/// things available to us. If we find that they are not dirty, we
|
/// things available to us. If we find that they are not dirty, we
|
||||||
|
@ -21,12 +21,11 @@ use {
|
|||||||
parking_lot::{Condvar, Mutex},
|
parking_lot::{Condvar, Mutex},
|
||||||
rayon_core,
|
rayon_core,
|
||||||
rustc_data_structures::fx::FxHashSet,
|
rustc_data_structures::fx::FxHashSet,
|
||||||
rustc_data_structures::sync::Lock,
|
|
||||||
rustc_data_structures::sync::Lrc,
|
|
||||||
rustc_data_structures::{defer, jobserver},
|
rustc_data_structures::{defer, jobserver},
|
||||||
rustc_span::DUMMY_SP,
|
rustc_span::DUMMY_SP,
|
||||||
std::iter,
|
std::iter,
|
||||||
std::process,
|
std::process,
|
||||||
|
std::sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Represents a span and a query key.
|
/// Represents a span and a query key.
|
||||||
@ -191,7 +190,7 @@ struct QueryWaiter<D: DepKind> {
|
|||||||
query: Option<QueryJobId>,
|
query: Option<QueryJobId>,
|
||||||
condvar: Condvar,
|
condvar: Condvar,
|
||||||
span: Span,
|
span: Span,
|
||||||
cycle: Lock<Option<CycleError<D>>>,
|
cycle: Mutex<Option<CycleError<D>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(parallel_compiler)]
|
#[cfg(parallel_compiler)]
|
||||||
@ -205,20 +204,20 @@ impl<D: DepKind> QueryWaiter<D> {
|
|||||||
#[cfg(parallel_compiler)]
|
#[cfg(parallel_compiler)]
|
||||||
struct QueryLatchInfo<D: DepKind> {
|
struct QueryLatchInfo<D: DepKind> {
|
||||||
complete: bool,
|
complete: bool,
|
||||||
waiters: Vec<Lrc<QueryWaiter<D>>>,
|
waiters: Vec<Arc<QueryWaiter<D>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(parallel_compiler)]
|
#[cfg(parallel_compiler)]
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub(super) struct QueryLatch<D: DepKind> {
|
pub(super) struct QueryLatch<D: DepKind> {
|
||||||
info: Lrc<Mutex<QueryLatchInfo<D>>>,
|
info: Arc<Mutex<QueryLatchInfo<D>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(parallel_compiler)]
|
#[cfg(parallel_compiler)]
|
||||||
impl<D: DepKind> QueryLatch<D> {
|
impl<D: DepKind> QueryLatch<D> {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
QueryLatch {
|
QueryLatch {
|
||||||
info: Lrc::new(Mutex::new(QueryLatchInfo { complete: false, waiters: Vec::new() })),
|
info: Arc::new(Mutex::new(QueryLatchInfo { complete: false, waiters: Vec::new() })),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,11 +228,11 @@ impl<D: DepKind> QueryLatch<D> {
|
|||||||
span: Span,
|
span: Span,
|
||||||
) -> Result<(), CycleError<D>> {
|
) -> Result<(), CycleError<D>> {
|
||||||
let waiter =
|
let waiter =
|
||||||
Lrc::new(QueryWaiter { query, span, cycle: Lock::new(None), condvar: Condvar::new() });
|
Arc::new(QueryWaiter { query, span, cycle: Mutex::new(None), condvar: Condvar::new() });
|
||||||
self.wait_on_inner(&waiter);
|
self.wait_on_inner(&waiter);
|
||||||
// FIXME: Get rid of this lock. We have ownership of the QueryWaiter
|
// FIXME: Get rid of this lock. We have ownership of the QueryWaiter
|
||||||
// although another thread may still have a Lrc reference so we cannot
|
// although another thread may still have a Arc reference so we cannot
|
||||||
// use Lrc::get_mut
|
// use Arc::get_mut
|
||||||
let mut cycle = waiter.cycle.lock();
|
let mut cycle = waiter.cycle.lock();
|
||||||
match cycle.take() {
|
match cycle.take() {
|
||||||
None => Ok(()),
|
None => Ok(()),
|
||||||
@ -242,7 +241,7 @@ impl<D: DepKind> QueryLatch<D> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Awaits the caller on this latch by blocking the current thread.
|
/// Awaits the caller on this latch by blocking the current thread.
|
||||||
fn wait_on_inner(&self, waiter: &Lrc<QueryWaiter<D>>) {
|
fn wait_on_inner(&self, waiter: &Arc<QueryWaiter<D>>) {
|
||||||
let mut info = self.info.lock();
|
let mut info = self.info.lock();
|
||||||
if !info.complete {
|
if !info.complete {
|
||||||
// We push the waiter on to the `waiters` list. It can be accessed inside
|
// We push the waiter on to the `waiters` list. It can be accessed inside
|
||||||
@ -276,7 +275,7 @@ impl<D: DepKind> QueryLatch<D> {
|
|||||||
|
|
||||||
/// Removes a single waiter from the list of waiters.
|
/// Removes a single waiter from the list of waiters.
|
||||||
/// This is used to break query cycles.
|
/// This is used to break query cycles.
|
||||||
fn extract_waiter(&self, waiter: usize) -> Lrc<QueryWaiter<D>> {
|
fn extract_waiter(&self, waiter: usize) -> Arc<QueryWaiter<D>> {
|
||||||
let mut info = self.info.lock();
|
let mut info = self.info.lock();
|
||||||
debug_assert!(!info.complete);
|
debug_assert!(!info.complete);
|
||||||
// Remove the waiter from the list of waiters
|
// Remove the waiter from the list of waiters
|
||||||
@ -428,7 +427,7 @@ where
|
|||||||
fn remove_cycle<D: DepKind>(
|
fn remove_cycle<D: DepKind>(
|
||||||
query_map: &QueryMap<D>,
|
query_map: &QueryMap<D>,
|
||||||
jobs: &mut Vec<QueryJobId>,
|
jobs: &mut Vec<QueryJobId>,
|
||||||
wakelist: &mut Vec<Lrc<QueryWaiter<D>>>,
|
wakelist: &mut Vec<Arc<QueryWaiter<D>>>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let mut visited = FxHashSet::default();
|
let mut visited = FxHashSet::default();
|
||||||
let mut stack = Vec::new();
|
let mut stack = Vec::new();
|
||||||
|
Loading…
Reference in New Issue
Block a user