Skip to main content

ThreadManagementState

Struct ThreadManagementState 

Source
pub(super) struct ThreadManagementState {
    pub(super) shutdown: bool,
    pub(super) shutdown_tx: Option<Sender>,
    pub(super) last_exiting_thread: Option<JoinHandle<()>>,
    pub(super) worker_threads: HashMap<usize, JoinHandle<()>>,
    pub(super) worker_thread_index: usize,
}
Expand description

Thread-management state used by every InnerImpl variant.

Fields§

§shutdown: bool§shutdown_tx: Option<Sender>§last_exiting_thread: Option<JoinHandle<()>>

Prior to shutdown, we clean up JoinHandles by having each timed-out thread join on the previous timed-out thread. This is not strictly necessary but helps avoid Valgrind false positives, see https://github.com/tokio-rs/tokio/commit/646fbae76535e397ef79dbcaacb945d4c829f666 for more information.

§worker_threads: HashMap<usize, JoinHandle<()>>

This holds the JoinHandles for all running threads; on shutdown, the thread calling shutdown handles joining on these.

§worker_thread_index: usize

This is a counter used to iterate worker_threads in a consistent order (for loom’s benefit).

Implementations§

Source§

impl ThreadManagementState

Source

pub(super) fn begin_shutdown( &mut self, ) -> Option<(Option<JoinHandle<()>>, HashMap<usize, JoinHandle<()>>)>

Flag the pool as shutting down and hand back the worker JoinHandles to join. Returns None if shutdown has already begun. The caller is responsible for waking all waiting workers.

Source

pub(super) fn worker_timed_out( &mut self, worker_thread_id: usize, ) -> Option<JoinHandle<()>>

Bookkeeping for a worker exiting on its keep-alive timeout: leaves its own handle for the next timed-out worker (or shutdown) to join, and returns the previous timed-out thread’s handle, which the caller must join after releasing the lock.

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, 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.