Commit 21ca54f560

daurnimator <quae@daurnimator.com>
2019-11-19 06:31:24
std: add alertable argument for windows.WaitForSingleObject
1 parent 8ecd6c4
Changed files (4)
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,
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,
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;
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);
             },