use rustc_index::vec::{Idx, IndexVec};
use rustc_middle::mir::Mutability;
+use crate::concurrency::data_race;
use crate::sync::SynchronizationState;
use crate::*;
// This allocation will be deallocated when the thread dies, so it is not in read-only memory.
allocation.mutability = Mutability::Mut;
// Create a fresh allocation with this content.
- let new_alloc = this.allocate_raw_ptr(allocation, MiriMemoryKind::Tls.into());
+ let new_alloc = this.allocate_raw_ptr(allocation, MiriMemoryKind::Tls.into())?;
this.machine.threads.set_thread_local_alloc(def_id, new_alloc);
Ok(new_alloc)
}
this.machine.threads.yield_active_thread();
}
+ #[inline]
+ fn maybe_preempt_active_thread(&mut self) {
+ use rand::Rng as _;
+
+ let this = self.eval_context_mut();
+ if this.machine.rng.get_mut().gen_bool(this.machine.preemption_rate) {
+ this.yield_active_thread();
+ }
+ }
+
#[inline]
fn register_timeout_callback(
&mut self,