Skip to content

Commit 5b8f9c5

Browse files
committed
Make CStore thread-safe
1 parent 4edb539 commit 5b8f9c5

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/librustc_metadata/cstore.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,23 @@ pub struct CrateMetadata {
8989
}
9090

9191
pub struct CStore {
92-
metas: RefCell<IndexVec<CrateNum, Option<Lrc<CrateMetadata>>>>,
92+
metas: RwLock<IndexVec<CrateNum, Option<Lrc<CrateMetadata>>>>,
9393
/// Map from NodeId's of local extern crate statements to crate numbers
94-
extern_mod_crate_map: RefCell<NodeMap<CrateNum>>,
94+
extern_mod_crate_map: Lock<NodeMap<CrateNum>>,
9595
pub metadata_loader: Box<MetadataLoader + Sync>,
9696
}
9797

9898
impl CStore {
9999
pub fn new(metadata_loader: Box<MetadataLoader + Sync>) -> CStore {
100100
CStore {
101-
metas: RefCell::new(IndexVec::new()),
102-
extern_mod_crate_map: RefCell::new(FxHashMap()),
101+
metas: RwLock::new(IndexVec::new()),
102+
extern_mod_crate_map: Lock::new(FxHashMap()),
103103
metadata_loader,
104104
}
105105
}
106106

107+
/// You cannot use this function to allocate a CrateNum in a thread-safe manner.
108+
/// It is currently only used in CrateLoader which is single-threaded code.
107109
pub fn next_crate_num(&self) -> CrateNum {
108110
CrateNum::new(self.metas.borrow().len() + 1)
109111
}

0 commit comments

Comments
 (0)