diff --git a/src/librustc_metadata/cstore.rs b/src/librustc_metadata/cstore.rs index 19f43c180de3..bd5ad93946e3 100644 --- a/src/librustc_metadata/cstore.rs +++ b/src/librustc_metadata/cstore.rs @@ -89,21 +89,23 @@ pub struct CrateMetadata { } pub struct CStore { - metas: RefCell>>>, + metas: RwLock>>>, /// Map from NodeId's of local extern crate statements to crate numbers - extern_mod_crate_map: RefCell>, + extern_mod_crate_map: Lock>, pub metadata_loader: Box, } impl CStore { pub fn new(metadata_loader: Box) -> CStore { CStore { - metas: RefCell::new(IndexVec::new()), - extern_mod_crate_map: RefCell::new(FxHashMap()), + metas: RwLock::new(IndexVec::new()), + extern_mod_crate_map: Lock::new(FxHashMap()), metadata_loader, } } + /// You cannot use this function to allocate a CrateNum in a thread-safe manner. + /// It is currently only used in CrateLoader which is single-threaded code. pub fn next_crate_num(&self) -> CrateNum { CrateNum::new(self.metas.borrow().len() + 1) }