From dd6337224f817044be01fd270e9d70ddbc0571a5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 30 Apr 2022 11:42:28 +0100 Subject: [PATCH] Correct explicit atomic orderings --- core/sync/primitives_atomic.odin | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/sync/primitives_atomic.odin b/core/sync/primitives_atomic.odin index 665b515ba..a0f08c412 100644 --- a/core/sync/primitives_atomic.odin +++ b/core/sync/primitives_atomic.odin @@ -298,7 +298,7 @@ atomic_cond_wait :: proc(c: ^Atomic_Cond, m: ^Atomic_Mutex) { } atomic_cond_wait_with_timeout :: proc(c: ^Atomic_Cond, m: ^Atomic_Mutex, duration: time.Duration) -> (ok: bool) { - state := u32(atomic_load(&c.state)) + state := u32(atomic_load_explicit(&c.state, .Relaxed)) unlock(m) ok = futex_wait_with_timeout(&c.state, state, duration) lock(m) @@ -307,12 +307,12 @@ atomic_cond_wait_with_timeout :: proc(c: ^Atomic_Cond, m: ^Atomic_Mutex, duratio atomic_cond_signal :: proc(c: ^Atomic_Cond) { - atomic_add_explicit(&c.state, 1, .Relaxed) + atomic_add_explicit(&c.state, 1, .Release) futex_signal(&c.state) } atomic_cond_broadcast :: proc(c: ^Atomic_Cond) { - atomic_add_explicit(&c.state, 1, .Relaxed) + atomic_add_explicit(&c.state, 1, .Release) futex_broadcast(&c.state) } @@ -351,7 +351,6 @@ atomic_sema_wait_with_timeout :: proc(s: ^Atomic_Sema, duration: time.Duration) return false } for { - original_count := atomic_load_explicit(&s.count, .Relaxed) for start := time.tick_now(); original_count == 0; /**/ { remaining := duration - time.tick_since(start)