use super::std_timer_scheduler::StdTimerScheduler;
#[must_use = "dropping an active worker guard fails its active registrations"]
pub(super) struct StdTimerWorkerGuard<'a> {
scheduler: &'a StdTimerScheduler,
worker_generation: u64,
}
impl<'a> StdTimerWorkerGuard<'a> {
#[inline(always)]
pub(super) const fn new(
scheduler: &'a StdTimerScheduler,
worker_generation: u64,
) -> Self {
Self {
scheduler,
worker_generation,
}
}
#[inline]
pub(super) fn handoff(mut self) -> Self {
let worker_guard = Self::new(self.scheduler, self.worker_generation);
self.worker_generation = 0;
worker_guard
}
}
impl Drop for StdTimerWorkerGuard<'_> {
#[inline(always)]
fn drop(&mut self) {
self.scheduler.handle_worker_exit(self.worker_generation);
}
}