Commit f1a1e84d authored by Ole André Vadla Ravnås's avatar Ole André Vadla Ravnås
Browse files

gthread: Port native mutex to Clang

And other toolchains that support stdatomic.
parent 01b77666
...@@ -72,8 +72,8 @@ ...@@ -72,8 +72,8 @@
#include <sys/syscall.h> #include <sys/syscall.h>
#endif #endif
/* clang defines __ATOMIC_SEQ_CST but doesn't support the GCC extension */ #if defined(HAVE_FUTEX) && \
#if defined(HAVE_FUTEX) && defined(__ATOMIC_SEQ_CST) && !defined(__clang__) (defined(HAVE_STDATOMIC_H) || defined(__ATOMIC_SEQ_CST))
#define USE_NATIVE_MUTEX #define USE_NATIVE_MUTEX
#endif #endif
...@@ -1401,6 +1401,23 @@ g_system_thread_set_name (const gchar *name) ...@@ -1401,6 +1401,23 @@ g_system_thread_set_name (const gchar *name)
* purposes... * 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) \ #define exchange_acquire(ptr, new) \
__atomic_exchange_4((ptr), (new), __ATOMIC_ACQUIRE) __atomic_exchange_4((ptr), (new), __ATOMIC_ACQUIRE)
#define compare_exchange_acquire(ptr, old, new) \ #define compare_exchange_acquire(ptr, old, new) \
...@@ -1411,6 +1428,8 @@ g_system_thread_set_name (const gchar *name) ...@@ -1411,6 +1428,8 @@ g_system_thread_set_name (const gchar *name)
#define store_release(ptr, new) \ #define store_release(ptr, new) \
__atomic_store_4((ptr), (new), __ATOMIC_RELEASE) __atomic_store_4((ptr), (new), __ATOMIC_RELEASE)
#endif
/* Our strategy for the mutex is pretty simple: /* Our strategy for the mutex is pretty simple:
* *
* 0: not in use * 0: not in use
......
...@@ -275,6 +275,7 @@ headers = [ ...@@ -275,6 +275,7 @@ headers = [
'pwd.h', 'pwd.h',
'sched.h', 'sched.h',
'spawn.h', 'spawn.h',
'stdatomic.h',
'stdint.h', 'stdint.h',
'stdlib.h', 'stdlib.h',
'string.h', 'string.h',
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment