struct FutexBucket {
entries: [Option<FutexBucketEntry>; 32],
}Fields§
§entries: [Option<FutexBucketEntry>; 32]Implementations§
Source§impl FutexBucket
impl FutexBucket
const fn new() -> Self
fn lookup(&self, addr: u64) -> Option<Arc<FutexQueue>>
fn get_or_insert(&mut self, addr: u64) -> Result<Arc<FutexQueue>, SyscallError>
Sourcefn remove_if_empty(&mut self, addr: u64, queue: &Arc<FutexQueue>)
fn remove_if_empty(&mut self, addr: u64, queue: &Arc<FutexQueue>)
Removes the slot for addr/queue if the queue is still empty.
§Lock ordering
This method is called while the bucket lock is held. It
re-acquires queue.waiters internally to re-verify emptiness.
Therefore the lock order on this path is:
bucket_lock → queue.waiters
Invariant: no code path may hold queue.waiters while trying to
acquire any bucket_lock. Violating this would cause an ABBA
deadlock with the ordering established here. All callers of
queue.waiters.lock() in the syscall handlers release the bucket
lock before acquiring waiters (bucket is released inside get_queue/
lookup_queue before the returned Arc is used).
Auto Trait Implementations§
impl !RefUnwindSafe for FutexBucket
impl !UnwindSafe for FutexBucket
impl Freeze for FutexBucket
impl Send for FutexBucket
impl Sync for FutexBucket
impl Unpin for FutexBucket
impl UnsafeUnpin for FutexBucket
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more