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
impl StartupLock
pub fn new() -> Self
sourcepub fn startup(
&self,
) -> Result<StartupLockGuard<'_>, StartupLockAlreadyStartedError>
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.
sourcepub fn stop_token(&self) -> Option<StopToken>
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
sourcepub fn is_started(&self) -> bool
pub fn is_started(&self) -> bool
Check if this StartupLock is currently in a started state Returns false is the state is in transition
sourcepub fn is_shut_down(&self) -> bool
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
sourcepub async fn shutdown(
&self,
) -> Result<StartupLockGuard<'_>, StartupLockAlreadyShutDownError>
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.
sourcepub fn enter(
&self,
) -> Result<StartupLockEnterGuard<'_>, StartupLockNotStartedError>
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
impl Debug for StartupLock
Auto Trait Implementations§
impl !Freeze for StartupLock
impl !RefUnwindSafe for StartupLock
impl Send for StartupLock
impl Sync for StartupLock
impl Unpin for StartupLock
impl UnwindSafe for StartupLock
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
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>
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>
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