pub struct SessionLock { /* private fields */ }Expand description
RAII guard preventing concurrent writes to the same JSONL session.
Owns the sentinel file <session_dir>/.lock for the lifetime of
the guard. On Drop, the sentinel is best-effort removed.
Stale-lock recovery: if the sentinel exists, its hostname matches
ours, and the recorded pid is not alive, acquire overwrites
it (logging a warning to stderr). If the hostname differs,
acquire refuses regardless of pid liveness — pid namespaces
across hosts aren’t comparable.
Why not flock(2): see g151 design — the sentinel approach
gives a better error message (“pid 12345 on host X is still
running”) and avoids NFS / iCloud / Dropbox flakiness.
Implementations§
Source§impl SessionLock
impl SessionLock
Sourcepub fn acquire(session_dir: &Path) -> Result<Self>
pub fn acquire(session_dir: &Path) -> Result<Self>
Acquire the lock for session_dir. Returns
std::io::Error wrapping a SessionLockBusy when
another live process holds it (or when an unrecoverable
cross-host lock is detected).
Trait Implementations§
Source§impl Debug for SessionLock
impl Debug for SessionLock
Source§impl Drop for SessionLock
impl Drop for SessionLock
Auto Trait Implementations§
impl Freeze for SessionLock
impl RefUnwindSafe for SessionLock
impl Send for SessionLock
impl Sync for SessionLock
impl Unpin for SessionLock
impl UnsafeUnpin for SessionLock
impl UnwindSafe for SessionLock
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
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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