Unnamed repository; edit this file 'description' to name the repository.
internal: fix deadlock introduced by #16643
David Barsky 2024-02-24
parent 1214404 · commit 6477973
-rw-r--r--crates/salsa/src/derived.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/crates/salsa/src/derived.rs b/crates/salsa/src/derived.rs
index bf532bdccf..153df999f5 100644
--- a/crates/salsa/src/derived.rs
+++ b/crates/salsa/src/derived.rs
@@ -146,11 +146,14 @@ where
revision: Revision,
) -> bool {
debug_assert!(revision < db.salsa_runtime().current_revision());
- let read = &self.slot_map.read();
+ let read = self.slot_map.read();
let Some((key, slot)) = read.get_index(index as usize) else {
return false;
};
- slot.maybe_changed_after(db, revision, key)
+ let (key, slot) = (key.clone(), slot.clone());
+ // note: this drop is load-bearing. removing it would causes deadlocks.
+ drop(read);
+ slot.maybe_changed_after(db, revision, &key)
}
fn fetch(&self, db: &<Q as QueryDb<'_>>::DynDb, key: &Q::Key) -> Q::Value {