gthread: Port native mutex to Clang

And other toolchains that support stdatomic.
This commit is contained in:
Ole André Vadla Ravnås 2017-07-21 19:40:48 +02:00
parent 01b77666bc
commit f1a1e84dda
2 changed files with 22 additions and 2 deletions

View File

@ -72,8 +72,8 @@
#include <sys/syscall.h>
#endif
/* clang defines __ATOMIC_SEQ_CST but doesn't support the GCC extension */
#if defined(HAVE_FUTEX) && defined(__ATOMIC_SEQ_CST) && !defined(__clang__)
#if defined(HAVE_FUTEX) && \
(defined(HAVE_STDATOMIC_H) || defined(__ATOMIC_SEQ_CST))
#define USE_NATIVE_MUTEX
#endif
@ -1401,6 +1401,23 @@ g_system_thread_set_name (const gchar *name)
* purposes...
*/
#ifdef HAVE_STDATOMIC_H
#include <stdatomic.h>
#define exchange_acquire(ptr, new) \
atomic_exchange_explicit((atomic_uint *) (ptr), (new), __ATOMIC_ACQUIRE)
#define compare_exchange_acquire(ptr, old, new) \
atomic_compare_exchange_strong_explicit((atomic_uint *) (ptr), (old), (new), \
__ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
#define exchange_release(ptr, new) \
atomic_exchange_explicit((atomic_uint *) (ptr), (new), __ATOMIC_RELEASE)
#define store_release(ptr, new) \
atomic_store_explicit((atomic_uint *) (ptr), (new), __ATOMIC_RELEASE)
#else
#define exchange_acquire(ptr, new) \
__atomic_exchange_4((ptr), (new), __ATOMIC_ACQUIRE)
#define compare_exchange_acquire(ptr, old, new) \
@ -1411,6 +1428,8 @@ g_system_thread_set_name (const gchar *name)
#define store_release(ptr, new) \
__atomic_store_4((ptr), (new), __ATOMIC_RELEASE)
#endif
/* Our strategy for the mutex is pretty simple:
*
* 0: not in use

View File

@ -275,6 +275,7 @@ headers = [
'pwd.h',
'sched.h',
'spawn.h',
'stdatomic.h',
'stdint.h',
'stdlib.h',
'string.h',