22// We are making scheduler assumptions here.
33//@compile-flags: -Zmiri-preemption-rate=0
44
5- use std:: mem :: MaybeUninit ;
5+ use std:: ptr :: null_mut ;
66use std:: thread;
77
88use windows_sys:: Win32 :: System :: Threading :: {
99 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 ,
1212} ;
1313
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+
1418#[ derive( Copy , Clone ) ]
1519struct SendPtr < T > ( * mut T ) ;
1620
@@ -20,11 +24,11 @@ unsafe impl<T> Send for SendPtr<T> {}
2024fn all_shared ( ) {
2125 println ! ( "all_shared" ) ;
2226
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 ;
2529
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) ;
2832
2933 let mut handles = Vec :: with_capacity ( 10 ) ;
3034
@@ -92,11 +96,11 @@ fn all_shared() {
9296fn shared_sleep_and_exclusive_lock ( ) {
9397 println ! ( "shared_sleep_and_exclusive_lock" ) ;
9498
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 ;
97101
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) ;
100104
101105 let mut waiters = Vec :: with_capacity ( 5 ) ;
102106 for i in 0 ..5 {
@@ -153,11 +157,11 @@ fn shared_sleep_and_exclusive_lock() {
153157fn exclusive_sleep_and_shared_lock ( ) {
154158 println ! ( "exclusive_sleep_and_shared_lock" ) ;
155159
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 ;
158162
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) ;
161165
162166 let mut handles = Vec :: with_capacity ( 10 ) ;
163167 for i in 0 ..5 {
0 commit comments