From fc87f6e417d206a88b581b77d3a5494ae4c978dd Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 13 Jun 2018 11:57:57 -0400 Subject: [PATCH] fix race condition bug in test harness of std.atomic --- std/atomic/queue.zig | 7 +++---- std/atomic/stack.zig | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/std/atomic/queue.zig b/std/atomic/queue.zig index 2a48407383..3dc64dbea2 100644 --- a/std/atomic/queue.zig +++ b/std/atomic/queue.zig @@ -124,15 +124,14 @@ fn startPuts(ctx: *Context) u8 { fn startGets(ctx: *Context) u8 { while (true) { + const last = @atomicLoad(u8, &ctx.puts_done, builtin.AtomicOrder.SeqCst) == 1; + while (ctx.queue.get()) |node| { std.os.time.sleep(0, 1); // let the os scheduler be our fuzz _ = @atomicRmw(isize, &ctx.get_sum, builtin.AtomicRmwOp.Add, node.data, builtin.AtomicOrder.SeqCst); _ = @atomicRmw(usize, &ctx.get_count, builtin.AtomicRmwOp.Add, 1, builtin.AtomicOrder.SeqCst); } - if (@atomicLoad(u8, &ctx.puts_done, builtin.AtomicOrder.SeqCst) == 1) { - break; - } + if (last) return 0; } - return 0; } diff --git a/std/atomic/stack.zig b/std/atomic/stack.zig index c6b368b990..9e81d89257 100644 --- a/std/atomic/stack.zig +++ b/std/atomic/stack.zig @@ -127,15 +127,14 @@ fn startPuts(ctx: *Context) u8 { fn startGets(ctx: *Context) u8 { while (true) { + const last = @atomicLoad(u8, &ctx.puts_done, builtin.AtomicOrder.SeqCst) == 1; + while (ctx.stack.pop()) |node| { std.os.time.sleep(0, 1); // let the os scheduler be our fuzz _ = @atomicRmw(isize, &ctx.get_sum, builtin.AtomicRmwOp.Add, node.data, builtin.AtomicOrder.SeqCst); _ = @atomicRmw(usize, &ctx.get_count, builtin.AtomicRmwOp.Add, 1, builtin.AtomicOrder.SeqCst); } - if (@atomicLoad(u8, &ctx.puts_done, builtin.AtomicOrder.SeqCst) == 1) { - break; - } + if (last) return 0; } - return 0; }