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: usizeThis is a counter used to iterate worker_threads in a consistent order (for loom’s
benefit).
Implementations§
Source§impl ThreadManagementState
impl ThreadManagementState
Sourcepub(super) fn begin_shutdown(
&mut self,
) -> Option<(Option<JoinHandle<()>>, HashMap<usize, JoinHandle<()>>)>
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.
Sourcepub(super) fn worker_timed_out(
&mut self,
worker_thread_id: usize,
) -> Option<JoinHandle<()>>
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.