1
Fork 0

std: clarify comments about initialization

This commit is contained in:
joboet 2024-11-30 16:22:56 +01:00
parent 528b37a738
commit 8b2ff49ff9
No known key found for this signature in database
GPG key ID: 704E0149B0194B3C
4 changed files with 13 additions and 11 deletions

View file

@ -23,7 +23,7 @@ impl Condvar {
}
/// # Safety
/// `init` must have been called.
/// `init` must have been called on this instance.
#[inline]
pub unsafe fn notify_one(self: Pin<&Self>) {
let r = unsafe { libc::pthread_cond_signal(self.raw()) };
@ -31,7 +31,7 @@ impl Condvar {
}
/// # Safety
/// `init` must have been called.
/// `init` must have been called on this instance.
#[inline]
pub unsafe fn notify_all(self: Pin<&Self>) {
let r = unsafe { libc::pthread_cond_broadcast(self.raw()) };
@ -39,7 +39,7 @@ impl Condvar {
}
/// # Safety
/// * `init` must have been called.
/// * `init` must have been called on this instance.
/// * `mutex` must be locked by the current thread.
/// * This condition variable may only be used with the same mutex.
#[inline]
@ -49,7 +49,7 @@ impl Condvar {
}
/// # Safety
/// * `init` must have been called.
/// * `init` must have been called on this instance.
/// * `mutex` must be locked by the current thread.
/// * This condition variable may only be used with the same mutex.
pub unsafe fn wait_timeout(&self, mutex: Pin<&Mutex>, dur: Duration) -> bool {
@ -95,7 +95,7 @@ impl Condvar {
const CLOCK: libc::clockid_t = libc::CLOCK_MONOTONIC;
/// # Safety
/// May only be called once.
/// May only be called once per instance of `Self`.
pub unsafe fn init(self: Pin<&mut Self>) {
use crate::mem::MaybeUninit;
@ -137,7 +137,7 @@ impl Condvar {
const CLOCK: libc::clockid_t = libc::CLOCK_REALTIME;
/// # Safety
/// May only be called once.
/// May only be called once per instance of `Self`.
pub unsafe fn init(self: Pin<&mut Self>) {
if cfg!(any(target_os = "espidf", target_os = "horizon", target_os = "teeos")) {
// NOTE: ESP-IDF's PTHREAD_COND_INITIALIZER support is not released yet

View file

@ -18,7 +18,7 @@ impl Mutex {
}
/// # Safety
/// Must only be called once.
/// May only be called once per instance of `Self`.
pub unsafe fn init(self: Pin<&mut Self>) {
// Issue #33770
//
@ -58,7 +58,8 @@ impl Mutex {
}
/// # Safety
/// * If `init` was not called, reentrant locking causes undefined behaviour.
/// * If `init` was not called on this instance, reentrant locking causes
/// undefined behaviour.
/// * Destroying a locked mutex causes undefined behaviour.
pub unsafe fn lock(self: Pin<&Self>) {
#[cold]
@ -82,7 +83,8 @@ impl Mutex {
}
/// # Safety
/// * If `init` was not called, reentrant locking causes undefined behaviour.
/// * If `init` was not called on this instance, reentrant locking causes
/// undefined behaviour.
/// * Destroying a locked mutex causes undefined behaviour.
pub unsafe fn try_lock(self: Pin<&Self>) -> bool {
unsafe { libc::pthread_mutex_trylock(self.raw()) == 0 }

View file

@ -22,7 +22,7 @@ impl Condvar {
fn get(&self) -> Pin<&pal::Condvar> {
self.cvar.get_or_init(|| {
let mut cvar = Box::pin(pal::Condvar::new());
// SAFETY: we only call `init` once, namely here.
// SAFETY: we only call `init` once per `pal::Condvar`, namely here.
unsafe { cvar.as_mut().init() };
cvar
})

View file

@ -21,7 +21,7 @@ impl Mutex {
// This is sound however, as it cannot have been locked.
self.pal.get_or_init(|| {
let mut pal = Box::pin(pal::Mutex::new());
// SAFETY: we only call `init` once, namely here.
// SAFETY: we only call `init` once per `pal::Mutex`, namely here.
unsafe { pal.as_mut().init() };
pal
})