From ac518471a3a49e067b594436f966d17c4b97dada Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 12 Aug 2021 13:41:52 -0400 Subject: [PATCH] TT#101150 add atomic64_set_if() Change-Id: I7ecc50ede0223cce6dc5b6cdc000d99520f8dac1 --- include/aux.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/aux.h b/include/aux.h index 4ee701eb4..2fb932348 100644 --- a/include/aux.h +++ b/include/aux.h @@ -434,6 +434,9 @@ INLINE uint64_t atomic64_get_na(const atomic64 *u) { INLINE void atomic64_set(atomic64 *u, uint64_t a) { g_atomic_pointer_set(&u->p, (void *) a); } +INLINE gboolean atomic64_set_if(atomic64 *u, uint64_t a, uint64_t i) { + return g_atomic_pointer_compare_and_exchange(&u->p, (void *) i, (void *) a); +} INLINE void atomic64_set_na(atomic64 *u, uint64_t a) { u->p = (void *) a; } @@ -481,6 +484,16 @@ INLINE void atomic64_set(atomic64 *u, uint64_t a) { u->u = a; mutex_unlock(&__atomic64_mutex); } +INLINE gboolean atomic64_set_if(atomic64 *u, uint64_t a, uint64_t i) { + gboolean done = TRUE; + mutex_lock(&__atomic64_mutex); + if (u->u == i) + u->u = a; + else + done = FALSE; + mutex_unlock(&__atomic64_mutex); + return done; +} INLINE void atomic64_set_na(atomic64 *u, uint64_t a) { u->u = a; }