about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2018-04-01 08:23:38 +0200
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2018-04-10 14:40:25 +0200
commit271c8d362a0df52d66ec666a27398ef3211e4c57 (patch)
tree7328a0cab6b0239beb016e202eb33faac8ed2161
parent8380539ecb88fba56a8fc0812df6fa52acab4123 (diff)
downloadrust-271c8d362a0df52d66ec666a27398ef3211e4c57.tar.gz
rust-271c8d362a0df52d66ec666a27398ef3211e4c57.zip
Make Session.crate_disambiguator thread-safe
-rw-r--r--src/librustc/session/mod.rs9
-rw-r--r--src/librustc_driver/driver.rs2
2 files changed, 4 insertions, 7 deletions
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
index 81012754a77..9ab9635c9ed 100644
--- a/src/librustc/session/mod.rs
+++ b/src/librustc/session/mod.rs
@@ -99,7 +99,7 @@ pub struct Session {
     /// forms a unique global identifier for the crate. It is used to allow
     /// multiple crates with the same name to coexist. See the
     /// trans::back::symbol_names module for more information.
-    pub crate_disambiguator: RefCell<Option<CrateDisambiguator>>,
+    pub crate_disambiguator: Once<CrateDisambiguator>,
 
     features: Once<feature_gate::Features>,
 
@@ -202,10 +202,7 @@ impl From<&'static lint::Lint> for DiagnosticMessageId {
 
 impl Session {
     pub fn local_crate_disambiguator(&self) -> CrateDisambiguator {
-        match *self.crate_disambiguator.borrow() {
-            Some(value) => value,
-            None => bug!("accessing disambiguator before initialization"),
-        }
+        *self.crate_disambiguator.get()
     }
 
     pub fn struct_span_warn<'a, S: Into<MultiSpan>>(
@@ -1101,7 +1098,7 @@ pub fn build_session_(
         plugin_attributes: RefCell::new(Vec::new()),
         crate_types: RefCell::new(Vec::new()),
         dependency_formats: RefCell::new(FxHashMap()),
-        crate_disambiguator: RefCell::new(None),
+        crate_disambiguator: Once::new(),
         features: Once::new(),
         recursion_limit: Once::new(),
         type_length_limit: Once::new(),
diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs
index 8372cbdd5df..4776f516eac 100644
--- a/src/librustc_driver/driver.rs
+++ b/src/librustc_driver/driver.rs
@@ -655,7 +655,7 @@ pub fn phase_2_configure_and_expand_inner<'a, F>(sess: &'a Session,
     *sess.crate_types.borrow_mut() = collect_crate_types(sess, &krate.attrs);
 
     let disambiguator = compute_crate_disambiguator(sess);
-    *sess.crate_disambiguator.borrow_mut() = Some(disambiguator);
+    sess.crate_disambiguator.set(disambiguator);
     rustc_incremental::prepare_session_directory(
         sess,
         &crate_name,