File tree 1 file changed +8
-2
lines changed
tests/pass-dep/concurrency
1 file changed +8
-2
lines changed Original file line number Diff line number Diff line change @@ -9,6 +9,10 @@ use std::thread;
9
9
use windows_sys:: Win32 :: Foundation :: { HANDLE , WAIT_OBJECT_0 } ;
10
10
use windows_sys:: Win32 :: System :: Threading :: { INFINITE , WaitForSingleObject } ;
11
11
12
+ #[ derive( Copy , Clone ) ]
13
+ struct UnsafeSendWrapper < T > ( T ) ;
14
+ unsafe impl < T > Send for UnsafeSendWrapper < T > { }
15
+
12
16
fn main ( ) {
13
17
static FLAG : AtomicBool = AtomicBool :: new ( false ) ;
14
18
@@ -17,10 +21,12 @@ fn main() {
17
21
thread:: yield_now ( ) ;
18
22
}
19
23
} )
20
- . into_raw_handle ( ) as HANDLE ;
24
+ . into_raw_handle ( ) ;
25
+ let blocker = UnsafeSendWrapper ( blocker as HANDLE ) ;
21
26
22
27
let waiter = move || unsafe {
23
- assert_eq ! ( WaitForSingleObject ( blocker, INFINITE ) , WAIT_OBJECT_0 ) ;
28
+ let blocker = blocker; // circumvent per-field capturing
29
+ assert_eq ! ( WaitForSingleObject ( blocker. 0 , INFINITE ) , WAIT_OBJECT_0 ) ;
24
30
} ;
25
31
26
32
let waiter1 = thread:: spawn ( waiter) ;
You can’t perform that action at this time.
0 commit comments