From 969b74144641bf1c8ae5aba0581f4b52a4c15bac Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Wed, 13 Nov 2019 00:21:05 +0100 Subject: [PATCH] protect creation of destructors by a mutex add on HermizCore an additional lock to protect static data --- src/libstd/sys/hermit/thread_local.rs | 3 +++ 1 file changed, 3 insertions(+) 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 @@ static NEXT_KEY: AtomicUsize = AtomicUsize::new(0); static mut KEYS: *mut BTreeMap> = ptr::null_mut(); +static KEYS_LOCK: Mutex = Mutex::new(); #[thread_local] static mut LOCALS: *mut BTreeMap = ptr::null_mut(); @@ -32,6 +34,7 @@ unsafe fn locals() -> &'static mut BTreeMap { #[inline] pub unsafe fn create(dtor: Option) -> Key { let key = NEXT_KEY.fetch_add(1, Ordering::SeqCst); + let _guard = KEYS_LOCK.lock(); keys().insert(key, dtor); key }