Bump parking_lot and remove workaround

This commit is contained in:
Laurențiu Nicola 2020-06-27 13:30:38 +03:00 committed by Aleksey Kladov
parent 832a5519be
commit c627cda525
2 changed files with 10 additions and 8 deletions

View file

@ -11,8 +11,9 @@ readme = "README.md"
[dependencies]
crossbeam = "0.7.1"
indexmap = "1.0.1"
lock_api = "0.4"
log = "0.4.5"
parking_lot = "0.10.0"
parking_lot = "0.11.0"
rustc-hash = "1.0"
smallvec = "1.0.0"
rand = { version = "0.7", features = [ "small_rng" ] }

View file

@ -15,9 +15,10 @@ use crate::runtime::Runtime;
use crate::runtime::RuntimeId;
use crate::runtime::StampedValue;
use crate::{CycleError, Database, DiscardIf, DiscardWhat, Event, EventKind, SweepStrategy};
// use lock_api::RawRwLockUpgrade;
use log::{debug, info};
use parking_lot::Mutex;
use parking_lot::RwLock;
use parking_lot::{RawRwLock, RwLock};
use smallvec::SmallVec;
use std::marker::PhantomData;
use std::ops::Deref;
@ -165,13 +166,13 @@ where
// Check with an upgradable read to see if there is a value
// already. (This permits other readers but prevents anyone
// else from running `read_upgrade` at the same time.)
//
// FIXME(Amanieu/parking_lot#101) -- we are using a write-lock
// and not an upgradable read here because upgradable reads
// can sometimes encounter deadlocks.
let old_memo = match self.probe(db, self.state.write(), runtime, revision_now) {
let old_memo = match self.probe(db, self.state.upgradable_read(), runtime, revision_now) {
ProbeState::UpToDate(v) => return v,
ProbeState::StaleOrAbsent(mut state) => {
ProbeState::StaleOrAbsent(state) => {
type RwLockUpgradableReadGuard<'a, T> =
lock_api::RwLockUpgradableReadGuard<'a, RawRwLock, T>;
let mut state = RwLockUpgradableReadGuard::upgrade(state);
match std::mem::replace(&mut *state, QueryState::in_progress(runtime.id())) {
QueryState::Memoized(old_memo) => Some(old_memo),
QueryState::InProgress { .. } => unreachable!(),