Skip to content

Commit 3a5994a

Browse files
committed
fix windows_join_multiple
1 parent 73bab2a commit 3a5994a

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

tests/pass-dep/concurrency/windows_join_multiple.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ use std::thread;
99
use windows_sys::Win32::Foundation::{HANDLE, WAIT_OBJECT_0};
1010
use windows_sys::Win32::System::Threading::{INFINITE, WaitForSingleObject};
1111

12+
#[derive(Copy, Clone)]
13+
struct UnsafeSendWrapper<T>(T);
14+
unsafe impl<T> Send for UnsafeSendWrapper<T> {}
15+
1216
fn main() {
1317
static FLAG: AtomicBool = AtomicBool::new(false);
1418

@@ -17,10 +21,12 @@ fn main() {
1721
thread::yield_now();
1822
}
1923
})
20-
.into_raw_handle() as HANDLE;
24+
.into_raw_handle();
25+
let blocker = UnsafeSendWrapper(blocker as HANDLE);
2126

2227
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);
2430
};
2531

2632
let waiter1 = thread::spawn(waiter);

0 commit comments

Comments
 (0)