Skip to main content

ThreadCharge

Struct ThreadCharge 

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

One thread’s charge against the process account, held for exactly as long as the thread is.

§Invariant

MUST: every thread this workspace creates holds one of these for its whole life, pool worker or not. MUST NOT: any thread reserve stack the account has not been told about.

§The defect this closes

The budget was an account of pool threads only, while an IOC also runs fixed ones — the scan bands, the delayed-callback timer, the CA acceptor, the audit writer, the status pusher, the dial pool’s workers. Measured at roughly 15 MiB on the VxWorks target: inside the headroom, and therefore invisible, which is not the same as accounted for. Two things go wrong while it stays invisible. The pool believes it may take the whole budget when it may not, so the refusal lands later than the number says; and the moment a target has more fixed threads than this one — a second server, more scan rates — the error is no longer small and nothing reports that it grew.

Drop is the release, so an exit path cannot forget: the charge is moved into the thread body and dies with it, including on unwind, and a Builder::spawn that fails drops the closure and with it the charge.

Implementations§

Source§

impl ThreadCharge

Source

pub fn fixed(stack: StackSizeClass) -> Self

Charge one fixed thread of stack. Never refuses — see Reservation::charge.

Trait Implementations§

Source§

impl Drop for ThreadCharge

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. 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 = 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>,

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