commit 4f7d76f19ca2fcb18b47f0d07c3dc1ceaab0b6f2 (tree) parent 15278b7f4b74e659fd968571cb9b96929da3d82c Author: Timon Kruiper <timonkruiper@gmail.com> Date: Sat, 23 Jan 2021 16:42:34 +0100 fix windows bug in Progress.zig This bug caused the compiler to deadlock when multiple c objects were build in parallel. Thanks @kprotty for finding this bug! Diffstat:
| M | lib/std/Progress.zig | | | 6 | +++++- |
| M | lib/std/os/windows/kernel32.zig | | | 2 | +- |
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/lib/std/Progress.zig b/lib/std/Progress.zig @@ -103,7 +103,11 @@ pub const Node = struct { } parent.completeOne(); } else { - self.context.done = true; + { + const held = self.context.update_lock.acquire(); + defer held.release(); + self.context.done = true; + } self.context.refresh(); } } diff --git a/lib/std/os/windows/kernel32.zig b/lib/std/os/windows/kernel32.zig @@ -299,6 +299,6 @@ pub extern "kernel32" fn SleepConditionVariableSRW( f: ULONG, ) callconv(WINAPI) BOOL; -pub extern "kernel32" fn TryAcquireSRWLockExclusive(s: *SRWLOCK) callconv(WINAPI) BOOL; +pub extern "kernel32" fn TryAcquireSRWLockExclusive(s: *SRWLOCK) callconv(WINAPI) BOOLEAN; pub extern "kernel32" fn AcquireSRWLockExclusive(s: *SRWLOCK) callconv(WINAPI) void; pub extern "kernel32" fn ReleaseSRWLockExclusive(s: *SRWLOCK) callconv(WINAPI) void;