Skip to main content

ProcStack

Struct ProcStack 

Source
pub struct ProcStack { /* private fields */ }
Expand description

The records whose dbProcess frame is live on the current chain.

C keeps this marker on the record — processTarget claims dbRec2Pvt(pdst)->procThread before dbProcess(pdst) (dbDbLink.c:500-503) and the frame that claimed it clears it on unwind (:523-526). The port cannot put it there: its frame has released the record lock by the time it unwinds, and re-taking it to clear a flag would cost more than the marker saves. So the marker travels with the chain.

What it travelled in was a HashSet<Arc<str>>, which hashed the record name on the way in and again on the way out and allocated a table to hold, at the depth a scan cycle actually reaches, one entry. The depth is the point: a scan of a record whose links are unwired is depth one, so the first claim lives in a field and only a real cascade allocates.

The entry is the record cell’s identity, as C’s marker is on the record itself: an alias claims the same entry as its target, and a claim costs no name clone or compare.

Implementations§

Source§

impl ProcStack

Source

pub fn new() -> Self

Source

pub fn claim(&mut self, rec: &Arc<RecordCell>) -> bool

Claim name for the calling frame. false when it is already on the chain — C’s cycle — and then the caller has claimed nothing and must not release anything.

Source

pub fn len(&self) -> usize

How many frames are live on this chain.

Source

pub fn is_empty(&self) -> bool

Whether no frame is live on this chain — the entry is the outermost.

Source

pub fn holds(&self, rec: &Arc<RecordCell>) -> bool

Whether a frame for rec is live on this chain.

Trait Implementations§

Source§

impl Debug for ProcStack

Source§

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

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

impl Default for ProcStack

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

Source§

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

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

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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