From a162e23f6a3925aa9746fe7663f2f9385f0388e3 Mon Sep 17 00:00:00 2001 From: Lennard Koehler Date: Mon, 26 Dec 2022 12:07:01 +0100 Subject: [PATCH] Fix `wait_imp` on windows --- src/stdlib/child/windows.rs | 9 +++++---- src/tokio/child/windows.rs | 11 ++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/stdlib/child/windows.rs b/src/stdlib/child/windows.rs index 07a8078..e0f9adc 100644 --- a/src/stdlib/child/windows.rs +++ b/src/stdlib/child/windows.rs @@ -10,7 +10,7 @@ use winapi::{ }, um::{ handleapi::CloseHandle, ioapiset::GetQueuedCompletionStatus, jobapi2::TerminateJobObject, - minwinbase::LPOVERLAPPED, winbase::INFINITE, winnt::HANDLE, + minwinbase::OVERLAPPED, winbase::INFINITE, winnt::HANDLE, }, }; @@ -70,21 +70,22 @@ impl ChildImp { fn wait_imp(&self, timeout: DWORD) -> Result<()> { let mut code: DWORD = 0; let mut key: ULONG_PTR = 0; - let mut overlapped = mem::MaybeUninit::::uninit(); + let mut overlapped = mem::MaybeUninit::::uninit(); + let mut lp_overlapped = overlapped.as_mut_ptr(); let result = unsafe { GetQueuedCompletionStatus( self.handles.completion_port, &mut code, &mut key, - overlapped.as_mut_ptr(), + &mut lp_overlapped, timeout, ) }; // ignore timing out errors unless the timeout was specified to INFINITE // https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatus - if timeout != INFINITE && result == FALSE && overlapped.as_ptr().is_null() { + if timeout != INFINITE && result == FALSE && lp_overlapped.is_null() { return Ok(()); } diff --git a/src/tokio/child/windows.rs b/src/tokio/child/windows.rs index 538b9a4..b4b7beb 100644 --- a/src/tokio/child/windows.rs +++ b/src/tokio/child/windows.rs @@ -10,7 +10,7 @@ use winapi::{ }, um::{ handleapi::CloseHandle, ioapiset::GetQueuedCompletionStatus, jobapi2::TerminateJobObject, - minwinbase::LPOVERLAPPED, winbase::INFINITE, winnt::HANDLE, + minwinbase::OVERLAPPED, winbase::INFINITE, winnt::HANDLE, }, }; @@ -70,21 +70,22 @@ impl ChildImp { fn wait_imp(handles: JobPort, timeout: DWORD) -> Result<()> { let mut code: DWORD = 0; let mut key: ULONG_PTR = 0; - let mut overlapped = mem::MaybeUninit::::uninit(); + let mut overlapped = mem::MaybeUninit::::uninit(); + let mut lp_overlapped = overlapped.as_mut_ptr(); let result = unsafe { GetQueuedCompletionStatus( - handles.completion_port, + self.handles.completion_port, &mut code, &mut key, - overlapped.as_mut_ptr(), + &mut lp_overlapped, timeout, ) }; // ignore timing out errors unless the timeout was specified to INFINITE // https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatus - if timeout != INFINITE && result == FALSE && overlapped.as_ptr().is_null() { + if timeout != INFINITE && result == FALSE && lp_overlapped.is_null() { return Ok(()); }