Skip to content

Commit e09c2ff

Browse files
committed
Make interners thread-safe
1 parent ec4a9c6 commit e09c2ff

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/librustc/ty/context.rs

+9-6
Original file line numberDiff line numberDiff line change
@@ -1080,12 +1080,13 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
10801080
self,
10811081
alloc: interpret::Allocation,
10821082
) -> &'gcx interpret::Allocation {
1083-
if let Some(alloc) = self.interpret_interner.inner.borrow().allocs.get(&alloc) {
1083+
let allocs = &mut self.interpret_interner.inner.borrow_mut().allocs;
1084+
if let Some(alloc) = allocs.get(&alloc) {
10841085
return alloc;
10851086
}
10861087

10871088
let interned = self.global_arenas.const_allocs.alloc(alloc);
1088-
if let Some(prev) = self.interpret_interner.inner.borrow_mut().allocs.replace(interned) {
1089+
if let Some(prev) = allocs.replace(interned) {
10891090
bug!("Tried to overwrite interned Allocation: {:#?}", prev)
10901091
}
10911092
interned
@@ -1112,24 +1113,26 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
11121113
}
11131114

11141115
pub fn intern_stability(self, stab: attr::Stability) -> &'gcx attr::Stability {
1115-
if let Some(st) = self.stability_interner.borrow().get(&stab) {
1116+
let mut stability_interner = self.stability_interner.borrow_mut();
1117+
if let Some(st) = stability_interner.get(&stab) {
11161118
return st;
11171119
}
11181120

11191121
let interned = self.global_interners.arena.alloc(stab);
1120-
if let Some(prev) = self.stability_interner.borrow_mut().replace(interned) {
1122+
if let Some(prev) = stability_interner.replace(interned) {
11211123
bug!("Tried to overwrite interned Stability: {:?}", prev)
11221124
}
11231125
interned
11241126
}
11251127

11261128
pub fn intern_layout(self, layout: LayoutDetails) -> &'gcx LayoutDetails {
1127-
if let Some(layout) = self.layout_interner.borrow().get(&layout) {
1129+
let mut layout_interner = self.layout_interner.borrow_mut();
1130+
if let Some(layout) = layout_interner.get(&layout) {
11281131
return layout;
11291132
}
11301133

11311134
let interned = self.global_arenas.layout.alloc(layout);
1132-
if let Some(prev) = self.layout_interner.borrow_mut().replace(interned) {
1135+
if let Some(prev) = layout_interner.replace(interned) {
11331136
bug!("Tried to overwrite interned Layout: {:?}", prev)
11341137
}
11351138
interned

0 commit comments

Comments
 (0)