diff options
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/hermit/thread_local.rs | 3 | ||||
| -rw-r--r-- | src/libstd/sys/sgx/abi/mod.rs | 1 | ||||
| -rw-r--r-- | src/libstd/sys/sgx/rwlock.rs | 3 |
3 files changed, 3 insertions, 4 deletions
diff --git a/src/libstd/sys/hermit/thread_local.rs b/src/libstd/sys/hermit/thread_local.rs index 4bc8c4d5883..268fb770eae 100644 --- a/src/libstd/sys/hermit/thread_local.rs +++ b/src/libstd/sys/hermit/thread_local.rs @@ -3,6 +3,7 @@ use crate::collections::BTreeMap; use crate::ptr; use crate::sync::atomic::{AtomicUsize, Ordering}; +use crate::sys_common::mutex::Mutex; pub type Key = usize; @@ -11,6 +12,7 @@ type Dtor = unsafe extern fn(*mut u8); static NEXT_KEY: AtomicUsize = AtomicUsize::new(0); static mut KEYS: *mut BTreeMap<Key, Option<Dtor>> = ptr::null_mut(); +static KEYS_LOCK: Mutex = Mutex::new(); #[thread_local] static mut LOCALS: *mut BTreeMap<Key, *mut u8> = ptr::null_mut(); @@ -32,6 +34,7 @@ unsafe fn locals() -> &'static mut BTreeMap<Key, *mut u8> { #[inline] pub unsafe fn create(dtor: Option<Dtor>) -> Key { let key = NEXT_KEY.fetch_add(1, Ordering::SeqCst); + let _guard = KEYS_LOCK.lock(); keys().insert(key, dtor); key } diff --git a/src/libstd/sys/sgx/abi/mod.rs b/src/libstd/sys/sgx/abi/mod.rs index 3a9b1fc8684..0f107de83f0 100644 --- a/src/libstd/sys/sgx/abi/mod.rs +++ b/src/libstd/sys/sgx/abi/mod.rs @@ -53,7 +53,6 @@ unsafe extern "C" fn tcs_init(secondary: bool) { // (main function exists). If this is a library, the crate author should be // able to specify this #[cfg(not(test))] -#[allow(improper_ctypes)] #[no_mangle] extern "C" fn entry(p1: u64, p2: u64, p3: u64, secondary: bool, p4: u64, p5: u64) -> (u64, u64) { // FIXME: how to support TLS in library mode? diff --git a/src/libstd/sys/sgx/rwlock.rs b/src/libstd/sys/sgx/rwlock.rs index c32e6dd3786..e2f94b1d928 100644 --- a/src/libstd/sys/sgx/rwlock.rs +++ b/src/libstd/sys/sgx/rwlock.rs @@ -172,7 +172,6 @@ const EINVAL: i32 = 22; #[cfg(not(test))] #[no_mangle] -#[allow(improper_ctypes)] pub unsafe extern "C" fn __rust_rwlock_rdlock(p: *mut RWLock) -> i32 { if p.is_null() { return EINVAL; @@ -182,7 +181,6 @@ pub unsafe extern "C" fn __rust_rwlock_rdlock(p: *mut RWLock) -> i32 { } #[cfg(not(test))] -#[allow(improper_ctypes)] #[no_mangle] pub unsafe extern "C" fn __rust_rwlock_wrlock(p: *mut RWLock) -> i32 { if p.is_null() { @@ -192,7 +190,6 @@ pub unsafe extern "C" fn __rust_rwlock_wrlock(p: *mut RWLock) -> i32 { return 0; } #[cfg(not(test))] -#[allow(improper_ctypes)] #[no_mangle] pub unsafe extern "C" fn __rust_rwlock_unlock(p: *mut RWLock) -> i32 { if p.is_null() { |
