avoid using the word 'initialized' to talk about that non-reentrant-capable state of the mutex
This commit is contained in:
parent
645388583c
commit
31bec788f4
@ -15,6 +15,7 @@ use sys_common;
|
||||
use sys_common::mutex::Mutex;
|
||||
|
||||
pub struct Lazy<T> {
|
||||
// We never call `lock.init()`, so it is UB to attempt to acquire this mutex reentrantly!
|
||||
lock: Mutex,
|
||||
ptr: Cell<*mut Arc<T>>,
|
||||
init: fn() -> Arc<T>,
|
||||
@ -29,8 +30,6 @@ impl<T: Send + Sync + 'static> Lazy<T> {
|
||||
/// Safety: `init` must not call `get` on the variable that is being
|
||||
/// initialized.
|
||||
pub const unsafe fn new(init: fn() -> Arc<T>) -> Lazy<T> {
|
||||
// `lock` is never initialized fully, so it is UB to attempt to
|
||||
// acquire this mutex reentrantly!
|
||||
Lazy {
|
||||
lock: Mutex::new(),
|
||||
ptr: Cell::new(ptr::null_mut()),
|
||||
|
@ -80,7 +80,7 @@ mod imp {
|
||||
|
||||
static mut ARGC: isize = 0;
|
||||
static mut ARGV: *const *const u8 = ptr::null();
|
||||
// `ENV_LOCK` is never initialized fully, so it is UB to attempt to
|
||||
// We never call `ENV_LOCK.init()`, so it is UB to attempt to
|
||||
// acquire this mutex reentrantly!
|
||||
static LOCK: Mutex = Mutex::new();
|
||||
|
||||
|
@ -33,7 +33,7 @@ use sys::fd;
|
||||
use vec;
|
||||
|
||||
const TMPBUF_SZ: usize = 128;
|
||||
// `ENV_LOCK` is never initialized fully, so it is UB to attempt to
|
||||
// We never call `ENV_LOCK.init()`, so it is UB to attempt to
|
||||
// acquire this mutex reentrantly!
|
||||
static ENV_LOCK: Mutex = Mutex::new();
|
||||
|
||||
|
@ -23,7 +23,7 @@ type Queue = Vec<Box<dyn FnBox()>>;
|
||||
// on poisoning and this module needs to operate at a lower level than requiring
|
||||
// the thread infrastructure to be in place (useful on the borders of
|
||||
// initialization/destruction).
|
||||
// `LOCK` is never initialized fully, so it is UB to attempt to
|
||||
// We never call `LOCK.init()`, so it is UB to attempt to
|
||||
// acquire this mutex reentrantly!
|
||||
static LOCK: Mutex = Mutex::new();
|
||||
static mut QUEUE: *mut Queue = ptr::null_mut();
|
||||
|
@ -32,7 +32,9 @@ impl Mutex {
|
||||
/// Prepare the mutex for use.
|
||||
///
|
||||
/// This should be called once the mutex is at a stable memory address.
|
||||
/// Behavior is undefined unless this is called before any other operation.
|
||||
/// If called, this must be the very first thing that happens to the mutex.
|
||||
/// Calling it in parallel with or after any operation (including another
|
||||
/// `init()`) is undefined behavior.
|
||||
#[inline]
|
||||
pub unsafe fn init(&mut self) { self.0.init() }
|
||||
|
||||
|
@ -161,7 +161,7 @@ impl StaticKey {
|
||||
// Additionally a 0-index of a tls key hasn't been seen on windows, so
|
||||
// we just simplify the whole branch.
|
||||
if imp::requires_synchronized_create() {
|
||||
// `INIT_LOCK` is never initialized fully, so it is UB to attempt to
|
||||
// We never call `INIT_LOCK.init()`, so it is UB to attempt to
|
||||
// acquire this mutex reentrantly!
|
||||
static INIT_LOCK: Mutex = Mutex::new();
|
||||
let _guard = INIT_LOCK.lock();
|
||||
|
@ -940,7 +940,7 @@ pub struct ThreadId(u64);
|
||||
impl ThreadId {
|
||||
// Generate a new unique thread ID.
|
||||
fn new() -> ThreadId {
|
||||
// `GUARD` is never initialized fully, so it is UB to attempt to
|
||||
// We never call `GUARD.init()`, so it is UB to attempt to
|
||||
// acquire this mutex reentrantly!
|
||||
static GUARD: mutex::Mutex = mutex::Mutex::new();
|
||||
static mut COUNTER: u64 = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user