Struct Guard

Source
pub struct Guard { /* private fields */ }
Expand description

An interrupt guard.

Created using disable.

While an instance of this guard is held, interrupts are disabled. When this guard is dropped, interrupts are restored to the state before disabling.

§Caveats (Drop Order)

If interrupts are enabled, acquiring a guard will disable them. Dropping this guard will enable interrupts again. Different Guards might be dropped in arbitrary order.

This may result in interrupts being enabled again, even though another Guard is still held. For this to happen, one must explicitly drop guards in the wrong order, though. As long as guards don’t leave their original drop scope, they are dropped automatically in the correct order.

§Examples

// interrupts may or may not be enabled
let guard = interrupts::disable();
// interrupts are disabled
drop(guard);
// interrupts are restored to the previous state

Dropping guards in the wrong order (don’t do this):

// Interrupts are enabled
let a = interrupts::disable();
// Interrupts are disabled
let b = interrupts::disable();
drop(a);
// Interrupts are enabled, although we still hold a guard in b
drop(b);

Trait Implementations§

Source§

impl Drop for Guard

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl Freeze for Guard

§

impl RefUnwindSafe for Guard

§

impl !Send for Guard

§

impl !Sync for Guard

§

impl Unpin for Guard

§

impl UnwindSafe for Guard

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.