diff --git a/lib/std/child_process.zig b/lib/std/child_process.zig index 36621758b2..e8cffaa1b9 100644 --- a/lib/std/child_process.zig +++ b/lib/std/child_process.zig @@ -235,7 +235,7 @@ pub const ChildProcess = struct { } fn waitUnwrappedWindows(self: *ChildProcess) !void { - const result = windows.WaitForSingleObject(self.handle, windows.INFINITE); + const result = windows.WaitForSingleObjectEx(self.handle, windows.INFINITE, false); self.term = @as(SpawnError!Term, x: { var exit_code: windows.DWORD = undefined; diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig index 5fc18accb8..2f51fc67a8 100644 --- a/lib/std/os/windows.zig +++ b/lib/std/os/windows.zig @@ -171,8 +171,8 @@ pub const WaitForSingleObjectError = error{ Unexpected, }; -pub fn WaitForSingleObject(handle: HANDLE, milliseconds: DWORD) WaitForSingleObjectError!void { - switch (kernel32.WaitForSingleObject(handle, milliseconds)) { +pub fn WaitForSingleObjectEx(handle: HANDLE, milliseconds: DWORD, alertable: bool) WaitForSingleObjectError!void { + switch (kernel32.WaitForSingleObjectEx(handle, milliseconds, @boolToInt(alertable))) { WAIT_ABANDONED => return error.WaitAbandoned, WAIT_OBJECT_0 => return, WAIT_TIMEOUT => return error.WaitTimeOut, diff --git a/lib/std/os/windows/kernel32.zig b/lib/std/os/windows/kernel32.zig index 30c4cf4785..3f14196d11 100644 --- a/lib/std/os/windows/kernel32.zig +++ b/lib/std/os/windows/kernel32.zig @@ -205,6 +205,8 @@ pub extern "kernel32" stdcallcc fn TlsFree(dwTlsIndex: DWORD) BOOL; pub extern "kernel32" stdcallcc fn WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: DWORD) DWORD; +pub extern "kernel32" stdcallcc fn WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: DWORD, bAlertable: BOOL) DWORD; + pub extern "kernel32" stdcallcc fn WriteFile( in_hFile: HANDLE, in_lpBuffer: [*]const u8, diff --git a/lib/std/thread.zig b/lib/std/thread.zig index fe976a6839..9f4cb3613a 100644 --- a/lib/std/thread.zig +++ b/lib/std/thread.zig @@ -99,7 +99,7 @@ pub const Thread = struct { os.munmap(self.data.memory); }, .windows => { - windows.WaitForSingleObject(self.data.handle, windows.INFINITE) catch unreachable; + windows.WaitForSingleObjectEx(self.data.handle, windows.INFINITE, false) catch unreachable; windows.CloseHandle(self.data.handle); windows.HeapFree(self.data.heap_handle, 0, self.data.alloc_start); },