diff --git a/src/WaitGroup.zig b/src/WaitGroup.zig index e5d4e600e2..6a0b12d050 100644 --- a/src/WaitGroup.zig +++ b/src/WaitGroup.zig @@ -32,19 +32,21 @@ pub fn stop(self: *WaitGroup) void { } pub fn wait(self: *WaitGroup) void { - const held = self.lock.acquire(); + while (true) { + const held = self.lock.acquire(); + + if (self.counter == 0) { + held.release(); + return; + } + + var event = std.ResetEvent.init(); + defer event.deinit(); + + std.debug.assert(self.event == null); + self.event = &event; - if (self.counter == 0) { held.release(); - return; + event.wait(); } - - var event = std.ResetEvent.init(); - defer event.deinit(); - - std.debug.assert(self.event == null); - self.event = &event; - - held.release(); - event.wait(); }