2
2
// We are making scheduler assumptions here.
3
3
//@compile-flags: -Zmiri-preemption-rate=0
4
4
5
- use std:: mem :: MaybeUninit ;
5
+ use std:: ptr :: null_mut ;
6
6
use std:: thread;
7
7
8
8
use windows_sys:: Win32 :: System :: Threading :: {
9
9
AcquireSRWLockExclusive , AcquireSRWLockShared , ReleaseSRWLockExclusive , ReleaseSRWLockShared ,
10
- SleepConditionVariableSRW , WakeAllConditionVariable , CONDITION_VARIABLE_LOCKMODE_SHARED ,
11
- INFINITE ,
10
+ SleepConditionVariableSRW , WakeAllConditionVariable , CONDITION_VARIABLE ,
11
+ CONDITION_VARIABLE_LOCKMODE_SHARED , INFINITE , SRWLOCK ,
12
12
} ;
13
13
14
+ // not in windows-sys
15
+ const SRWLOCK_INIT : SRWLOCK = SRWLOCK { Ptr : null_mut ( ) } ;
16
+ const CONDITION_VARIABLE_INIT : CONDITION_VARIABLE = CONDITION_VARIABLE { Ptr : null_mut ( ) } ;
17
+
14
18
#[ derive( Copy , Clone ) ]
15
19
struct SendPtr < T > ( * mut T ) ;
16
20
@@ -20,11 +24,11 @@ unsafe impl<T> Send for SendPtr<T> {}
20
24
fn all_shared ( ) {
21
25
println ! ( "all_shared" ) ;
22
26
23
- let mut lock = MaybeUninit :: zeroed ( ) ;
24
- let mut condvar = MaybeUninit :: zeroed ( ) ;
27
+ let mut lock = SRWLOCK_INIT ;
28
+ let mut condvar = CONDITION_VARIABLE_INIT ;
25
29
26
- let lock_ptr = SendPtr ( lock. as_mut_ptr ( ) ) ;
27
- let condvar_ptr = SendPtr ( condvar. as_mut_ptr ( ) ) ;
30
+ let lock_ptr = SendPtr ( & mut lock) ;
31
+ let condvar_ptr = SendPtr ( & mut condvar) ;
28
32
29
33
let mut handles = Vec :: with_capacity ( 10 ) ;
30
34
@@ -92,11 +96,11 @@ fn all_shared() {
92
96
fn shared_sleep_and_exclusive_lock ( ) {
93
97
println ! ( "shared_sleep_and_exclusive_lock" ) ;
94
98
95
- let mut lock = MaybeUninit :: zeroed ( ) ;
96
- let mut condvar = MaybeUninit :: zeroed ( ) ;
99
+ let mut lock = SRWLOCK_INIT ;
100
+ let mut condvar = CONDITION_VARIABLE_INIT ;
97
101
98
- let lock_ptr = SendPtr ( lock. as_mut_ptr ( ) ) ;
99
- let condvar_ptr = SendPtr ( condvar. as_mut_ptr ( ) ) ;
102
+ let lock_ptr = SendPtr ( & mut lock) ;
103
+ let condvar_ptr = SendPtr ( & mut condvar) ;
100
104
101
105
let mut waiters = Vec :: with_capacity ( 5 ) ;
102
106
for i in 0 ..5 {
@@ -153,11 +157,11 @@ fn shared_sleep_and_exclusive_lock() {
153
157
fn exclusive_sleep_and_shared_lock ( ) {
154
158
println ! ( "exclusive_sleep_and_shared_lock" ) ;
155
159
156
- let mut lock = MaybeUninit :: zeroed ( ) ;
157
- let mut condvar = MaybeUninit :: zeroed ( ) ;
160
+ let mut lock = SRWLOCK_INIT ;
161
+ let mut condvar = CONDITION_VARIABLE_INIT ;
158
162
159
- let lock_ptr = SendPtr ( lock. as_mut_ptr ( ) ) ;
160
- let condvar_ptr = SendPtr ( condvar. as_mut_ptr ( ) ) ;
163
+ let lock_ptr = SendPtr ( & mut lock) ;
164
+ let condvar_ptr = SendPtr ( & mut condvar) ;
161
165
162
166
let mut handles = Vec :: with_capacity ( 10 ) ;
163
167
for i in 0 ..5 {
0 commit comments