mirror of
https://github.com/salsa-rs/salsa.git
synced 2025-01-12 08:30:51 +00:00
Bump parking_lot and remove workaround
This commit is contained in:
parent
3b8f0754c3
commit
025c882cbb
2 changed files with 10 additions and 8 deletions
|
@ -11,8 +11,9 @@ readme = "README.md"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
crossbeam = "0.7.1"
|
crossbeam = "0.7.1"
|
||||||
indexmap = "1.0.1"
|
indexmap = "1.0.1"
|
||||||
|
lock_api = "0.4"
|
||||||
log = "0.4.5"
|
log = "0.4.5"
|
||||||
parking_lot = "0.10.0"
|
parking_lot = "0.11.0"
|
||||||
rustc-hash = "1.0"
|
rustc-hash = "1.0"
|
||||||
smallvec = "1.0.0"
|
smallvec = "1.0.0"
|
||||||
rand = { version = "0.7", features = [ "small_rng" ] }
|
rand = { version = "0.7", features = [ "small_rng" ] }
|
||||||
|
|
|
@ -15,9 +15,10 @@ use crate::runtime::Runtime;
|
||||||
use crate::runtime::RuntimeId;
|
use crate::runtime::RuntimeId;
|
||||||
use crate::runtime::StampedValue;
|
use crate::runtime::StampedValue;
|
||||||
use crate::{CycleError, Database, DiscardIf, DiscardWhat, Event, EventKind, SweepStrategy};
|
use crate::{CycleError, Database, DiscardIf, DiscardWhat, Event, EventKind, SweepStrategy};
|
||||||
|
// use lock_api::RawRwLockUpgrade;
|
||||||
use log::{debug, info};
|
use log::{debug, info};
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use parking_lot::RwLock;
|
use parking_lot::{RawRwLock, RwLock};
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
@ -165,13 +166,13 @@ where
|
||||||
// Check with an upgradable read to see if there is a value
|
// Check with an upgradable read to see if there is a value
|
||||||
// already. (This permits other readers but prevents anyone
|
// already. (This permits other readers but prevents anyone
|
||||||
// else from running `read_upgrade` at the same time.)
|
// else from running `read_upgrade` at the same time.)
|
||||||
//
|
let old_memo = match self.probe(db, self.state.upgradable_read(), runtime, revision_now) {
|
||||||
// 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) {
|
|
||||||
ProbeState::UpToDate(v) => return v,
|
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())) {
|
match std::mem::replace(&mut *state, QueryState::in_progress(runtime.id())) {
|
||||||
QueryState::Memoized(old_memo) => Some(old_memo),
|
QueryState::Memoized(old_memo) => Some(old_memo),
|
||||||
QueryState::InProgress { .. } => unreachable!(),
|
QueryState::InProgress { .. } => unreachable!(),
|
||||||
|
|
Loading…
Reference in a new issue