Struct veilid_tools::StartupLock

source ·
pub struct StartupLock { /* private fields */ }
Expand description

Synchronization mechanism that tracks the startup and shutdown of a region of code. Guarantees that some code can only be started up once and shut down only if it is already started. Also tracks if the code is in-use and will wait for all ‘entered’ code to finish before shutting down. Once a shutdown is requested, future calls to ‘enter’ will fail, ensuring that nothing is ‘entered’ at the time of shutdown. This allows an asynchronous shutdown to wait for operations to finish before proceeding.

Implementations§

source§

impl StartupLock

source

pub fn new() -> Self

source

pub fn startup( &self, ) -> Result<StartupLockGuard<'_>, StartupLockAlreadyStartedError>

Start up if things are not already started up One must call ‘success()’ on the returned startup lock guard if startup was successful otherwise the startup lock will not shift to the ‘started’ state.

source

pub fn stop_token(&self) -> Option<StopToken>

Get a stop token for this lock One can wait on this to timeout operations when a shutdown is requested

source

pub fn is_started(&self) -> bool

Check if this StartupLock is currently in a started state Returns false is the state is in transition

source

pub fn is_shut_down(&self) -> bool

Check if this StartupLock is currently in a shut down state Returns false is the state is in transition

source

pub async fn shutdown( &self, ) -> Result<StartupLockGuard<'_>, StartupLockAlreadyShutDownError>

Wait for all ‘entered’ operations to finish before shutting down One must call ‘success()’ on the returned startup lock guard if shutdown was successful otherwise the startup lock will not shift to the ‘stopped’ state.

source

pub fn enter( &self, ) -> Result<StartupLockEnterGuard<'_>, StartupLockNotStartedError>

Enter an operation in a started-up module. If this module has not yet started up or is in the process of startup or shutdown this will fail.

Trait Implementations§

source§

impl Debug for StartupLock

source§

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

Formats the value using the given formatter. Read more
source§

impl Default for StartupLock

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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> 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<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V