Enum GlobalDataRaceHandler

Source
pub enum GlobalDataRaceHandler {
    None,
    Genmc(Rc<GenmcCtx>),
    Vclocks(Box<GlobalState>),
}

Variants§

§

None

No data race detection will be done.

§

Genmc(Rc<GenmcCtx>)

State required to run in GenMC mode. In this mode, the program will be executed repeatedly to explore different concurrent executions. The GenmcCtx must persist across multiple executions, so it is behind an Rc.

The GenmcCtx has several methods with which to inform it about events like atomic memory accesses. In GenMC mode, some functionality is taken over by GenMC:

  • Memory Allocation: Allocated addresses need to be consistent across executions, which Miri’s allocator doesn’t guarantee
  • Scheduling: To influence which concurrent execution we will explore next, GenMC takes over scheduling
  • Atomic operations: GenMC will ensure that we explore all possible values that the memory model allows an atomic operation to see at any specific point of the program.
§

Vclocks(Box<GlobalState>)

The default data race detector for Miri using vector clocks.

Implementations§

Source§

impl GlobalDataRaceHandler

Source

fn set_ongoing_action_data_race_free(&self, enable: bool)

Select whether data race checking is disabled. This is solely an implementation detail of allow_data_races_* and must not be used anywhere else!

Source§

impl GlobalDataRaceHandler

Source

pub fn is_none(&self) -> bool

Source

pub fn as_vclocks_ref(&self) -> Option<&GlobalState>

Source

pub fn as_vclocks_mut(&mut self) -> Option<&mut GlobalState>

Source

pub fn as_genmc_ref(&self) -> Option<&GenmcCtx>

Trait Implementations§

Auto Trait Implementations§

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> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 16 bytes

Size for each variant:

  • None: 0 bytes
  • Genmc: 8 bytes
  • Vclocks: 8 bytes