pub struct KMutexGuard<'a, Class: LockClass, M: RawLock = RawMutex, P: ExclusiveLockPolicy<M> = <M as RawLock>::DefaultPolicy> { /* private fields */ }Expand description
A validation guard representing exclusive lock ownership and active list participation.
The guard is pinned in memory to ensure that its state remains safe and valid
inside the C++ loop detector active thread list.
Implementations§
Source§impl<'a, Class: LockClass, M: RawLock, P: ExclusiveLockPolicy<M>> KMutexGuard<'a, Class, M, P>
impl<'a, Class: LockClass, M: RawLock, P: ExclusiveLockPolicy<M>> KMutexGuard<'a, Class, M, P>
Sourcepub fn new(mutex: &'a KMutex<Class, M>) -> impl PinInit<Self, Infallible>where
P: ExclusiveLockPolicy<M, AcquireArgs = ()>,
pub fn new(mutex: &'a KMutex<Class, M>) -> impl PinInit<Self, Infallible>where
P: ExclusiveLockPolicy<M, AcquireArgs = ()>,
Creates a new stack-pinned validation guard initialization block.
Sourcepub fn new_with_args(
mutex: &'a KMutex<Class, M>,
args: P::AcquireArgs,
) -> impl PinInit<Self, Infallible>
pub fn new_with_args( mutex: &'a KMutex<Class, M>, args: P::AcquireArgs, ) -> impl PinInit<Self, Infallible>
Creates a new stack-pinned validation guard initialization block with policy acquire arguments.
Sourcepub fn token(&self) -> &LockToken<'a, Class>
pub fn token(&self) -> &LockToken<'a, Class>
Returns a shared reference to the lock proof LockToken.
Sourcepub fn token_mut(self: Pin<&mut Self>) -> &mut LockToken<'a, Class>
pub fn token_mut(self: Pin<&mut Self>) -> &mut LockToken<'a, Class>
Returns a mutable reference to the lock proof LockToken inside this pinned projection.
Sourcepub unsafe fn token_unchecked(&self) -> &LockToken<'a, Class>
pub unsafe fn token_unchecked(&self) -> &LockToken<'a, Class>
§Safety
The guard has not been released.
Sourcepub unsafe fn token_mut_unchecked(
self: Pin<&mut Self>,
) -> &mut LockToken<'a, Class>
pub unsafe fn token_mut_unchecked( self: Pin<&mut Self>, ) -> &mut LockToken<'a, Class>
§Safety
The guard has not been released.
Sourcepub fn is_locked_by(&self, target: &KMutex<Class, M>) -> bool
pub fn is_locked_by(&self, target: &KMutex<Class, M>) -> bool
Returns true if this guard currently holds the given target mutex instance.
Sourcepub fn release(self: Pin<&mut Self>)
pub fn release(self: Pin<&mut Self>)
Explicitly releases the lock before the guard is dropped.
If the lock has already been released, this is a no-op.
Sourcepub fn call_unlocked<R, F: FnOnce() -> R>(self: Pin<&mut Self>, f: F) -> R
pub fn call_unlocked<R, F: FnOnce() -> R>(self: Pin<&mut Self>, f: F) -> R
Temporarily releases the lock before executing the given callable f and then
re-acquires the lock.
Sourcepub fn call_untracked<R, F: FnOnce(&mut LockToken<'a, Class>) -> R>(
self: Pin<&mut Self>,
f: F,
) -> R
pub fn call_untracked<R, F: FnOnce(&mut LockToken<'a, Class>) -> R>( self: Pin<&mut Self>, f: F, ) -> R
Calls a closure while temporarily disabling lockdep tracking for the lock held by this guard.
Trait Implementations§
Source§impl<'a, Class: LockClass, M: RawLock, P: ExclusiveLockPolicy<M>> Drop for KMutexGuard<'a, Class, M, P>
impl<'a, Class: LockClass, M: RawLock, P: ExclusiveLockPolicy<M>> Drop for KMutexGuard<'a, Class, M, P>
Auto Trait Implementations§
impl<'a, Class, M = LockdepTracked<RawMutexStorage>, P = <M as RawLock>::DefaultPolicy> !Send for KMutexGuard<'a, Class, M, P>
impl<'a, Class, M = LockdepTracked<RawMutexStorage>, P = <M as RawLock>::DefaultPolicy> !Sync for KMutexGuard<'a, Class, M, P>
impl<'a, Class, M, P> Freeze for KMutexGuard<'a, Class, M, P>where
Option<&'a KMutex<Class, M>>: Freeze,
<P as LockPolicy<M>>::GuardState: Freeze,
LockToken<'a, Class>: Freeze,
impl<'a, Class, M, P> RefUnwindSafe for KMutexGuard<'a, Class, M, P>where
Option<&'a KMutex<Class, M>>: RefUnwindSafe,
<P as LockPolicy<M>>::GuardState: RefUnwindSafe,
LockToken<'a, Class>: RefUnwindSafe,
impl<'a, Class, M, P> Unpin for KMutexGuard<'a, Class, M, P>where
Option<&'a KMutex<Class, M>>: Unpin,
<P as LockPolicy<M>>::GuardState: Unpin,
LockToken<'a, Class>: Unpin,
impl<'a, Class, M, P> UnsafeUnpin for KMutexGuard<'a, Class, M, P>where
Option<&'a KMutex<Class, M>>: UnsafeUnpin,
<P as LockPolicy<M>>::GuardState: UnsafeUnpin,
LockToken<'a, Class>: UnsafeUnpin,
impl<'a, Class, M, P> UnwindSafe for KMutexGuard<'a, Class, M, P>where
Option<&'a KMutex<Class, M>>: UnwindSafe,
<P as LockPolicy<M>>::GuardState: UnwindSafe,
LockToken<'a, Class>: UnwindSafe,
Blanket Implementations§
§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T, U> Into<U> for Twhere
U: From<T>,
impl<T, U> Into<U> for Twhere
U: From<T>,
Source§impl<T> PinInit<T> for T
impl<T> PinInit<T> for T
Source§unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), !>
unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), !>
slot. Read moreSource§fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>where
F: FnOnce(Pin<&mut T>) -> Result<(), E>,
fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>where
F: FnOnce(Pin<&mut T>) -> Result<(), E>,
self then calls the function f with the initialized
value. Read more