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
impl ThreadCharge
Sourcepub fn fixed(stack: StackSizeClass) -> Self
pub fn fixed(stack: StackSizeClass) -> Self
Charge one fixed thread of stack. Never refuses — see
Reservation::charge.