use super::{CLOSED, POLLING, WAKE_MASK};
pub(crate) struct RunOnDrop<F: FnMut()> {
drop_fn: F,
}
impl<F: FnMut()> RunOnDrop<F> {
pub(crate) fn new(drop_fn: F) -> Self {
Self { drop_fn }
}
}
impl<F: FnMut()> Drop for RunOnDrop<F> {
fn drop(&mut self) {
(self.drop_fn)();
}
}
#[inline(always)]
pub(crate) fn runnable_exists(state: u64) -> bool {
state & POLLING != 0 && state & (WAKE_MASK | CLOSED) != 0
}