From a580f2a39882bde742fb817ae61677100dbe0ce3 Mon Sep 17 00:00:00 2001 From: Tarry Singh Date: Tue, 18 Feb 2025 11:38:56 +0000 Subject: [PATCH] Async: use stronger memory ordering to prevent potential segfaults due to ordering issues. --- async/async.zig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/async/async.zig b/async/async.zig index 5cee994..78e225b 100644 --- a/async/async.zig +++ b/async/async.zig @@ -121,15 +121,15 @@ pub const threading = struct { waiter: std.atomic.Value(*const State) = std.atomic.Value(*const State).init(&State.unset_state), pub fn isSet(self: *ResetEventSingle) bool { - return self.waiter.load(.monotonic) == &State.set_state; + return self.waiter.load(.seq_cst) == &State.set_state; } pub fn reset(self: *ResetEventSingle) void { - self.waiter.store(&State.unset_state, .monotonic); + self.waiter.store(&State.unset_state, .seq_cst); } pub fn set(self: *ResetEventSingle) void { - switch (self.waiter.swap(&State.set_state, .monotonic).*) { + switch (self.waiter.swap(&State.set_state, .seq_cst).*) { .waiting => |waiter| { waiter.thread.waiters_queue.push(waiter); waiter.thread.wake(); @@ -146,7 +146,7 @@ pub const threading = struct { var new_state: State = .{ .waiting = &waiter, }; - if (self.waiter.cmpxchgStrong(&State.unset_state, &new_state, .monotonic, .monotonic) == null) { + if (self.waiter.cmpxchgStrong(&State.unset_state, &new_state, .seq_cst, .seq_cst) == null) { while (self.isSet() == false) { coro.xsuspend(); }