struct Held {
count: usize,
stop: Option<Sender<()>>,
scanning: Arc<Mutex<()>>,
first_read: Arc<Notify>,
nudged: Arc<Notify>,
pr_stale: Arc<AtomicBool>,
test_tree_moved: Arc<AtomicBool>,
pass_done: Arc<Notify>,
}Fields§
§count: usizeHow many holders the seat has, so one view leaving does not stop a scan another still reads.
stop: Option<Sender<()>>Dropped to stop the seat’s loop, which also drops its watch.
scanning: Arc<Mutex<()>>One scan at a time for this seat: the loop’s read, the record’s read and any read a fixture drives are serialised, so a second one for the same tree is waste.
first_read: Arc<Notify>Fired by the record’s first read, which is what the page’s snapshot carries. The watch’s first pass starts from the stores that read left, so one read serves both halves and no value is sent twice.
nudged: Arc<Notify>Wakes the loop out of its poke wait when the session reports a
repository mutation, so the tree is re-read then rather than at the
next staleness window. A commit or a stage touches only .git, which
the file watch filters out, so the watch itself never fires for one.
pr_stale: Arc<AtomicBool>Set with a nudge when the change published means the PR block the loop holds was looked up before the PR existed, so the next scan must look again rather than serve the cache inside its own window.
test_tree_moved: Arc<AtomicBool>A test’s report that the tree moved, taken by the loop as the file watch’s own mark, whose channel belongs to a thread no test can reach.
pass_done: Arc<Notify>Raised at the end of every pass, so a test can wait for the pass that starts from a record’s read rather than clock it.
Auto Trait Implementations§
impl !RefUnwindSafe for Held
impl !UnwindSafe for Held
impl Freeze for Held
impl Send for Held
impl Sync for Held
impl Unpin for Held
impl UnsafeUnpin for Held
Blanket Implementations§
§impl<T> AnySync for T
impl<T> AnySync for T
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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