From 78ab1f609a4fb2514d8223e8ce6bf9195c01b5d6 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 21 Dec 2020 18:23:47 -0700 Subject: [PATCH] apply kprotty's WaitGroup fix --- src/WaitGroup.zig | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) 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(); }