diff options
| author | bors <bors@rust-lang.org> | 2023-10-22 07:20:06 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-10-22 07:20:06 +0000 |
| commit | f35c36af19dd24569d760c77388036fffad0be1a (patch) | |
| tree | 89bf8c1ecc49818cbd9640e98f74dd3443cd02b6 | |
| parent | f6be93fc61fb487c496c94ebe76ee999572fc927 (diff) | |
| parent | b53c34f7b823e74eed970be80dcd5622cee9cd56 (diff) | |
| download | rust-f35c36af19dd24569d760c77388036fffad0be1a.tar.gz rust-f35c36af19dd24569d760c77388036fffad0be1a.zip | |
Auto merge of #3135 - RalfJung:nonatomic-clock, r=RalfJung
avoid AtomicU64 when a Cell is enough
| -rw-r--r-- | src/tools/miri/src/clock.rs | 13 | ||||
| -rw-r--r-- | src/tools/miri/src/lib.rs | 1 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/tools/miri/src/clock.rs b/src/tools/miri/src/clock.rs index 24bf90f104f..fd0c121626b 100644 --- a/src/tools/miri/src/clock.rs +++ b/src/tools/miri/src/clock.rs @@ -1,4 +1,4 @@ -use std::sync::atomic::{AtomicU64, Ordering}; +use std::cell::Cell; use std::time::{Duration, Instant as StdInstant}; /// When using a virtual clock, this defines how many nanoseconds we pretend are passing for each @@ -59,7 +59,7 @@ enum ClockKind { }, Virtual { /// The "current virtual time". - nanoseconds: AtomicU64, + nanoseconds: Cell<u64>, }, } @@ -82,7 +82,7 @@ impl Clock { // Time will pass without us doing anything. } ClockKind::Virtual { nanoseconds } => { - nanoseconds.fetch_add(NANOSECONDS_PER_BASIC_BLOCK, Ordering::SeqCst); + nanoseconds.update(|x| x + NANOSECONDS_PER_BASIC_BLOCK); } } } @@ -93,7 +93,8 @@ impl Clock { ClockKind::Host { .. } => std::thread::sleep(duration), ClockKind::Virtual { nanoseconds } => { // Just pretend that we have slept for some time. - nanoseconds.fetch_add(duration.as_nanos().try_into().unwrap(), Ordering::SeqCst); + let nanos: u64 = duration.as_nanos().try_into().unwrap(); + nanoseconds.update(|x| x + nanos); } } } @@ -110,9 +111,7 @@ impl Clock { match &self.kind { ClockKind::Host { .. } => Instant { kind: InstantKind::Host(StdInstant::now()) }, ClockKind::Virtual { nanoseconds } => - Instant { - kind: InstantKind::Virtual { nanoseconds: nanoseconds.load(Ordering::SeqCst) }, - }, + Instant { kind: InstantKind::Virtual { nanoseconds: nanoseconds.get() } }, } } } diff --git a/src/tools/miri/src/lib.rs b/src/tools/miri/src/lib.rs index 68b9164dec0..b12aae6d414 100644 --- a/src/tools/miri/src/lib.rs +++ b/src/tools/miri/src/lib.rs @@ -1,4 +1,5 @@ #![feature(rustc_private)] +#![feature(cell_update)] #![feature(float_gamma)] #![feature(map_try_insert)] #![feature(never_type)] |
