authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-21 18:23:47-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-23 13:36:21-08:00
log78ab1f609a4fb2514d8223e8ce6bf9195c01b5d6
tree17e823447fe3dfa606c4a411c37c3f135095c833
parent19459840fe0a1dcc39a4552a430a70fbf39b52ea

apply kprotty's WaitGroup fix


1 files changed, 13 insertions(+), 11 deletions(-)

src/WaitGroup.zig+13-11
...@@ -32,19 +32,21 @@ pub fn stop(self: *WaitGroup) void {...@@ -32,19 +32,21 @@ pub fn stop(self: *WaitGroup) void {
32}32}
3333
34pub fn wait(self: *WaitGroup) void {34pub fn wait(self: *WaitGroup) void {
35 const held = self.lock.acquire();35 while (true) {
36 const held = self.lock.acquire();
3637
37 if (self.counter == 0) {38 if (self.counter == 0) {
38 held.release();39 held.release();
39 return;40 return;
40 }41 }
4142
42 var event = std.ResetEvent.init();43 var event = std.ResetEvent.init();
43 defer event.deinit();44 defer event.deinit();
4445
45 std.debug.assert(self.event == null);46 std.debug.assert(self.event == null);
46 self.event = &event;47 self.event = &event;
4748
48 held.release();49 held.release();
49 event.wait();50 event.wait();
51 }
50}52}