From d6cfb6050613872c3ae70cbbe446276cec4ded12 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 27 Apr 2022 15:29:21 +0100 Subject: [PATCH] Remove `prev` from `Atomic_Cond` --- core/sync/primitives_atomic.odin | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/core/sync/primitives_atomic.odin b/core/sync/primitives_atomic.odin index 812e5ae97..665b515ba 100644 --- a/core/sync/primitives_atomic.odin +++ b/core/sync/primitives_atomic.odin @@ -287,12 +287,10 @@ atomic_recursive_mutex_guard :: proc(m: ^Atomic_Recursive_Mutex) -> bool { // An Atomic_Cond must not be copied after first use Atomic_Cond :: struct { state: Futex, - prev: u32, } atomic_cond_wait :: proc(c: ^Atomic_Cond, m: ^Atomic_Mutex) { - state := u32(atomic_load(&c.state)) - atomic_store(&c.prev, state) + state := u32(atomic_load_explicit(&c.state, .Relaxed)) unlock(m) futex_wait(&c.state, state) lock(m) @@ -309,14 +307,12 @@ atomic_cond_wait_with_timeout :: proc(c: ^Atomic_Cond, m: ^Atomic_Mutex, duratio atomic_cond_signal :: proc(c: ^Atomic_Cond) { - state := 1 + atomic_load(&c.prev) - atomic_store(&c.state, Futex(state)) + atomic_add_explicit(&c.state, 1, .Relaxed) futex_signal(&c.state) } atomic_cond_broadcast :: proc(c: ^Atomic_Cond) { - state := 1 + atomic_load(&c.prev) - atomic_store(&c.state, Futex(state)) + atomic_add_explicit(&c.state, 1, .Relaxed) futex_broadcast(&c.state) }