diff options
| author | Ralf Jung <post@ralfj.de> | 2025-04-04 15:28:14 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2025-04-04 15:28:14 +0200 |
| commit | e2c8ae96f6814ac80cdf3952a881da51867b73c8 (patch) | |
| tree | 099d74781dd8340af48d79d584c6651fc91c286d | |
| parent | eb00d966a0bb3124e4ac75993177d999e4c1116d (diff) | |
| download | rust-e2c8ae96f6814ac80cdf3952a881da51867b73c8.tar.gz rust-e2c8ae96f6814ac80cdf3952a881da51867b73c8.zip | |
fix windows_join_multiple
| -rw-r--r-- | src/tools/miri/tests/pass-dep/concurrency/windows_join_multiple.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/tools/miri/tests/pass-dep/concurrency/windows_join_multiple.rs b/src/tools/miri/tests/pass-dep/concurrency/windows_join_multiple.rs index ce829eee227..2796541a3d7 100644 --- a/src/tools/miri/tests/pass-dep/concurrency/windows_join_multiple.rs +++ b/src/tools/miri/tests/pass-dep/concurrency/windows_join_multiple.rs @@ -9,6 +9,10 @@ use std::thread; use windows_sys::Win32::Foundation::{HANDLE, WAIT_OBJECT_0}; use windows_sys::Win32::System::Threading::{INFINITE, WaitForSingleObject}; +#[derive(Copy, Clone)] +struct UnsafeSendWrapper<T>(T); +unsafe impl<T> Send for UnsafeSendWrapper<T> {} + fn main() { static FLAG: AtomicBool = AtomicBool::new(false); @@ -17,10 +21,12 @@ fn main() { thread::yield_now(); } }) - .into_raw_handle() as HANDLE; + .into_raw_handle(); + let blocker = UnsafeSendWrapper(blocker as HANDLE); let waiter = move || unsafe { - assert_eq!(WaitForSingleObject(blocker, INFINITE), WAIT_OBJECT_0); + let blocker = blocker; // circumvent per-field capturing + assert_eq!(WaitForSingleObject(blocker.0, INFINITE), WAIT_OBJECT_0); }; let waiter1 = thread::spawn(waiter); |
