rerun::external::parking_lot::lock_api

Struct ArcRwLockUpgradableReadGuard

pub struct ArcRwLockUpgradableReadGuard<R, T>
where R: RawRwLockUpgrade, T: ?Sized,
{ rwlock: Arc<RwLock<R, T>>, marker: PhantomData<<R as RawRwLock>::GuardMarker>, }
Expand description

An RAII rwlock guard returned by the Arc locking operations on RwLock. This is similar to the RwLockUpgradableReadGuard struct, except instead of using a reference to unlock the RwLock it uses an Arc<RwLock>. This has several advantages, most notably that it has an 'static lifetime.

Fields§

§rwlock: Arc<RwLock<R, T>>§marker: PhantomData<<R as RawRwLock>::GuardMarker>

Implementations§

§

impl<R, T> ArcRwLockUpgradableReadGuard<R, T>
where R: RawRwLockUpgrade, T: ?Sized,

pub fn rwlock(s: &ArcRwLockUpgradableReadGuard<R, T>) -> &Arc<RwLock<R, T>>

Returns a reference to the rwlock, contained in its original Arc.

pub fn unlocked<F, U>(s: &mut ArcRwLockUpgradableReadGuard<R, T>, f: F) -> U
where F: FnOnce() -> U,

Temporarily unlocks the RwLock to execute the given function.

This is functionally identical to the unlocked method on RwLockUpgradableReadGuard.

pub fn upgrade( s: ArcRwLockUpgradableReadGuard<R, T>, ) -> ArcRwLockWriteGuard<R, T>

Atomically upgrades an upgradable read lock lock into an exclusive write lock, blocking the current thread until it can be acquired.

pub fn try_upgrade( s: ArcRwLockUpgradableReadGuard<R, T>, ) -> Result<ArcRwLockWriteGuard<R, T>, ArcRwLockUpgradableReadGuard<R, T>>

Tries to atomically upgrade an upgradable read lock into an exclusive write lock.

If the access could not be granted at this time, then the current guard is returned.

§

impl<R, T> ArcRwLockUpgradableReadGuard<R, T>

pub fn unlock_fair(s: ArcRwLockUpgradableReadGuard<R, T>)

Unlocks the RwLock using a fair unlock protocol.

This is functionally identical to the unlock_fair method on RwLockUpgradableReadGuard.

pub fn unlocked_fair<F, U>( s: &mut ArcRwLockUpgradableReadGuard<R, T>, f: F, ) -> U
where F: FnOnce() -> U,

Temporarily unlocks the RwLock to execute the given function.

This is functionally equivalent to the unlocked_fair method on RwLockUpgradableReadGuard.

pub fn bump(s: &mut ArcRwLockUpgradableReadGuard<R, T>)

Temporarily yields the RwLock to a waiting thread if there is one.

This method is functionally equivalent to calling bump on RwLockUpgradableReadGuard.

§

impl<R, T> ArcRwLockUpgradableReadGuard<R, T>

pub fn downgrade( s: ArcRwLockUpgradableReadGuard<R, T>, ) -> ArcRwLockReadGuard<R, T>

Atomically downgrades an upgradable read lock lock into a shared read lock without allowing any writers to take exclusive access of the lock in the meantime.

Note that if there are any writers currently waiting to take the lock then other readers may not be able to acquire the lock even if it was downgraded.

pub fn with_upgraded<Ret, F>(&mut self, f: F) -> Ret
where F: FnOnce(&mut T) -> Ret,

First, atomically upgrades an upgradable read lock lock into an exclusive write lock, blocking the current thread until it can be acquired.

Then, calls the provided closure with an exclusive reference to the lock’s data.

Finally, atomically downgrades the lock back to an upgradable read lock. The closure’s return value is returned.

This function only requires a mutable reference to the guard, unlike upgrade which takes the guard by value.

pub fn try_with_upgraded<Ret, F>(&mut self, f: F) -> Option<Ret>
where F: FnOnce(&mut T) -> Ret,

First, tries to atomically upgrade an upgradable read lock into an exclusive write lock.

If the access could not be granted at this time, then None is returned.

Otherwise, calls the provided closure with an exclusive reference to the lock’s data, and finally downgrades the lock back to an upgradable read lock. The closure’s return value is wrapped in Some and returned.

This function only requires a mutable reference to the guard, unlike try_upgrade which takes the guard by value.

§

impl<R, T> ArcRwLockUpgradableReadGuard<R, T>

pub fn try_upgrade_for( s: ArcRwLockUpgradableReadGuard<R, T>, timeout: <R as RawRwLockTimed>::Duration, ) -> Result<ArcRwLockWriteGuard<R, T>, ArcRwLockUpgradableReadGuard<R, T>>

Tries to atomically upgrade an upgradable read lock into an exclusive write lock, until a timeout is reached.

If the access could not be granted before the timeout expires, then the current guard is returned.

pub fn try_upgrade_until( s: ArcRwLockUpgradableReadGuard<R, T>, timeout: <R as RawRwLockTimed>::Instant, ) -> Result<ArcRwLockWriteGuard<R, T>, ArcRwLockUpgradableReadGuard<R, T>>

Tries to atomically upgrade an upgradable read lock into an exclusive write lock, until a timeout is reached.

If the access could not be granted before the timeout expires, then the current guard is returned.

§

impl<R, T> ArcRwLockUpgradableReadGuard<R, T>

pub fn try_with_upgraded_for<Ret, F>( &mut self, timeout: <R as RawRwLockTimed>::Duration, f: F, ) -> Option<Ret>
where F: FnOnce(&mut T) -> Ret,

Tries to atomically upgrade an upgradable read lock into an exclusive write lock, until a timeout is reached.

If the access could not be granted before the timeout expires, then None is returned.

Otherwise, calls the provided closure with an exclusive reference to the lock’s data, and finally downgrades the lock back to an upgradable read lock. The closure’s return value is wrapped in Some and returned.

This function only requires a mutable reference to the guard, unlike try_upgrade_for which takes the guard by value.

pub fn try_with_upgraded_until<Ret, F>( &mut self, timeout: <R as RawRwLockTimed>::Instant, f: F, ) -> Option<Ret>
where F: FnOnce(&mut T) -> Ret,

Tries to atomically upgrade an upgradable read lock into an exclusive write lock, until a timeout is reached.

If the access could not be granted before the timeout expires, then None is returned.

Otherwise, calls the provided closure with an exclusive reference to the lock’s data, and finally downgrades the lock back to an upgradable read lock. The closure’s return value is wrapped in Some and returned.

This function only requires a mutable reference to the guard, unlike try_upgrade_until which takes the guard by value.

Trait Implementations§

§

impl<R, T> Debug for ArcRwLockUpgradableReadGuard<R, T>
where R: RawRwLockUpgrade, T: Debug + ?Sized,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<R, T> Deref for ArcRwLockUpgradableReadGuard<R, T>
where R: RawRwLockUpgrade, T: ?Sized,

§

type Target = T

The resulting type after dereferencing.
§

fn deref(&self) -> &T

Dereferences the value.
§

impl<R, T> Display for ArcRwLockUpgradableReadGuard<R, T>
where R: RawRwLockUpgrade, T: Display + ?Sized,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<R, T> Drop for ArcRwLockUpgradableReadGuard<R, T>
where R: RawRwLockUpgrade, T: ?Sized,

§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<R, T> Freeze for ArcRwLockUpgradableReadGuard<R, T>
where T: ?Sized,

§

impl<R, T> !RefUnwindSafe for ArcRwLockUpgradableReadGuard<R, T>

§

impl<R, T> Send for ArcRwLockUpgradableReadGuard<R, T>
where <R as RawRwLock>::GuardMarker: Send, R: Sync + Send, T: Send + Sync + ?Sized,

§

impl<R, T> Sync for ArcRwLockUpgradableReadGuard<R, T>
where <R as RawRwLock>::GuardMarker: Sync, R: Sync + Send, T: Send + Sync + ?Sized,

§

impl<R, T> Unpin for ArcRwLockUpgradableReadGuard<R, T>
where <R as RawRwLock>::GuardMarker: Unpin, T: ?Sized,

§

impl<R, T> !UnwindSafe for ArcRwLockUpgradableReadGuard<R, T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> To for T
where T: ?Sized,

§

fn to<T>(self) -> T
where Self: Into<T>,

Converts to T by calling Into<T>::into.
§

fn try_to<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Tries to convert to T by calling TryInto<T>::try_into.
§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

§

fn to_smolstr(&self) -> SmolStr

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> Formattable for T
where T: Deref, <T as Deref>::Target: Formattable,

§

impl<T> MaybeSendSync for T

§

impl<T> Parsable for T
where T: Deref, <T as Deref>::Target: Parsable,

§

impl<T> Ungil for T
where T: Send,

Source§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T

§

impl<T> WasmNotSync for T
where T: Sync,