From acdeedc19253130798916a8bb20651657d9f01e5 Mon Sep 17 00:00:00 2001 From: Robin Kruppe Date: Sun, 14 May 2017 20:33:37 +0200 Subject: Use AtomicBool instead of a 'static mut' for LLVM init posioning --- src/librustc_trans/llvm_util.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/librustc_trans/llvm_util.rs b/src/librustc_trans/llvm_util.rs index 0f4c6b64080..15f56036b0c 100644 --- a/src/librustc_trans/llvm_util.rs +++ b/src/librustc_trans/llvm_util.rs @@ -16,23 +16,25 @@ use rustc::session::config::PrintRequest; use libc::{c_int, c_char}; use std::ffi::CString; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::Once; + pub fn init(sess: &Session) { unsafe { // Before we touch LLVM, make sure that multithreading is enabled. - use std::sync::Once; + static POISONED: AtomicBool = AtomicBool::new(false); static INIT: Once = Once::new(); - static mut POISONED: bool = false; INIT.call_once(|| { if llvm::LLVMStartMultithreaded() != 1 { // use an extra bool to make sure that all future usage of LLVM // cannot proceed despite the Once not running more than once. - POISONED = true; + POISONED.store(true, Ordering::SeqCst); } configure_llvm(sess); }); - if POISONED { + if POISONED.load(Ordering::SeqCst) { bug!("couldn't enable multi-threaded LLVM"); } } -- cgit 1.4.1-3-g733a5