ostd/task/preempt/
guard.rsuse crate::{sync::GuardTransfer, task::atomic_mode::InAtomicMode};
#[clippy::has_significant_drop]
#[must_use]
#[derive(Debug)]
pub struct DisabledPreemptGuard {
_private: (),
}
impl !Send for DisabledPreemptGuard {}
unsafe impl InAtomicMode for DisabledPreemptGuard {}
impl DisabledPreemptGuard {
fn new() -> Self {
super::cpu_local::inc_guard_count();
Self { _private: () }
}
}
impl GuardTransfer for DisabledPreemptGuard {
fn transfer_to(&mut self) -> Self {
disable_preempt()
}
}
impl Drop for DisabledPreemptGuard {
fn drop(&mut self) {
super::cpu_local::dec_guard_count();
}
}
pub fn disable_preempt() -> DisabledPreemptGuard {
DisabledPreemptGuard::new()
}