From: Jaroslav Kysela Date: Wed, 9 Mar 2016 13:51:26 +0000 (+0100) Subject: atomic.h: add mutex implementation for 64-bit exchange, fixes #3616 X-Git-Tag: v4.2.1~915 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eda03e9ce445d154dcc6f67e0de4f8651971a356;p=thirdparty%2Ftvheadend.git atomic.h: add mutex implementation for 64-bit exchange, fixes #3616 --- diff --git a/src/atomic.h b/src/atomic.h index 125d785e8..a4efb83f0 100644 --- a/src/atomic.h +++ b/src/atomic.h @@ -150,19 +150,43 @@ atomic_exchange(volatile int *ptr, int val) static inline uint64_t atomic_exchange_u64(volatile uint64_t *ptr, uint64_t val) { +#if ENABLE_ATOMIC64 return __sync_lock_test_and_set(ptr, val); +#else + uint64_t ret; + pthread_mutex_lock(&atomic_lock); + ret = *ptr; + *ptr = val; + pthread_mutex_unlock(&atomic_lock); +#endif } static inline int64_t atomic_exchange_s64(volatile int64_t *ptr, int64_t val) { +#if ENABLE_ATOMIC64 return __sync_lock_test_and_set(ptr, val); +#else + int64_t ret; + pthread_mutex_lock(&atomic_lock); + ret = *ptr; + *ptr = val; + pthread_mutex_unlock(&atomic_lock); +#endif } static inline time_t atomic_exchange_time_t(volatile time_t *ptr, time_t val) { +#if ENABLE_ATOMIC_TIME_T return __sync_lock_test_and_set(ptr, val); +#else + time_t ret; + pthread_mutex_lock(&atomic_lock); + ret = *ptr; + *ptr = val; + pthread_mutex_unlock(&atomic_lock); +#endif } /*