Skip to content

Commit d59bad9

Browse files
committed
fix data_race test
1 parent 7df41a7 commit d59bad9

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

tests/pass/concurrency/data_race.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//@ignore-target-windows: Concurrency on Windows is not supported yet.
2-
//@compile-flags: -Zmiri-disable-weak-memory-emulation
2+
//@compile-flags: -Zmiri-disable-weak-memory-emulation -Zmiri-preemption-rate=0
33

44
use std::sync::atomic::{fence, AtomicUsize, Ordering};
55
use std::thread::spawn;
@@ -10,9 +10,9 @@ struct EvilSend<T>(pub T);
1010
unsafe impl<T> Send for EvilSend<T> {}
1111
unsafe impl<T> Sync for EvilSend<T> {}
1212

13-
static SYNC: AtomicUsize = AtomicUsize::new(0);
14-
1513
fn test_fence_sync() {
14+
static SYNC: AtomicUsize = AtomicUsize::new(0);
15+
1616
let mut var = 0u32;
1717
let ptr = &mut var as *mut u32;
1818
let evil_ptr = EvilSend(ptr);
@@ -28,7 +28,7 @@ fn test_fence_sync() {
2828
fence(Ordering::Acquire);
2929
unsafe { *evil_ptr.0 }
3030
} else {
31-
0
31+
panic!(); // relies on thread 2 going last
3232
}
3333
});
3434

@@ -56,6 +56,8 @@ fn test_multiple_reads() {
5656
}
5757

5858
pub fn test_rmw_no_block() {
59+
static SYNC: AtomicUsize = AtomicUsize::new(0);
60+
5961
let mut a = 0u32;
6062
let b = &mut a as *mut u32;
6163
let c = EvilSend(b);
@@ -77,11 +79,13 @@ pub fn test_rmw_no_block() {
7779
j1.join().unwrap();
7880
j2.join().unwrap();
7981
let v = j3.join().unwrap();
80-
assert!(v == 1 || v == 2);
82+
assert!(v == 1 || v == 2); // relies on thread 3 going last
8183
}
8284
}
8385

8486
pub fn test_simple_release() {
87+
static SYNC: AtomicUsize = AtomicUsize::new(0);
88+
8589
let mut a = 0u32;
8690
let b = &mut a as *mut u32;
8791
let c = EvilSend(b);
@@ -95,7 +99,7 @@ pub fn test_simple_release() {
9599
let j2 = spawn(move || if SYNC.load(Ordering::Acquire) == 1 { *c.0 } else { 0 });
96100

97101
j1.join().unwrap();
98-
assert_eq!(j2.join().unwrap(), 1);
102+
assert_eq!(j2.join().unwrap(), 1); // relies on thread 2 going last
99103
}
100104
}
101105

0 commit comments

Comments
 (0)