aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2023-01-05 20:23:26 +0000
committerJonathan Wakely <jwakely@redhat.com>2023-01-12 11:01:09 +0000
commitdc22cf461278ace754042d9388a62afb002dfa0e (patch)
tree1e029a14a59f7b2bc3cceed2730fa15bc1088c96
parent2ce55247a8bf32985a96ed63a7a92d36746723dc (diff)
downloadgcc-dc22cf461278ace754042d9388a62afb002dfa0e.zip
gcc-dc22cf461278ace754042d9388a62afb002dfa0e.tar.gz
gcc-dc22cf461278ace754042d9388a62afb002dfa0e.tar.bz2
libstdc++: Use lock-free type for __platform_wait_t
For non-futex targets the __platform_wait_t type is currently uint64_t, but that requires a lock in libatomic for some 32-bit targets. We don't really need a 64-bit type, so use unsigned long if that is lock-free, and int otherwise. This should mean it's lock-free on a wider set of targets. libstdc++-v3/ChangeLog: * include/bits/atomic_wait.h (__detail::__platform_wait_t): Define as unsigned long if always lock-free, and unsigned int otherwise.
-rw-r--r--libstdc++-v3/include/bits/atomic_wait.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/atomic_wait.h b/libstdc++-v3/include/bits/atomic_wait.h
index bd1ed56..1d7a034 100644
--- a/libstdc++-v3/include/bits/atomic_wait.h
+++ b/libstdc++-v3/include/bits/atomic_wait.h
@@ -64,7 +64,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// and __platform_notify() if there is a more efficient primitive supported
// by the platform (e.g. __ulock_wait()/__ulock_wake()) which is better than
// a mutex/condvar based wait.
- using __platform_wait_t = uint64_t;
+# if ATOMIC_LONG_LOCK_FREE == 2
+ using __platform_wait_t = unsigned long;
+# else
+ using __platform_wait_t = unsigned int;
+# endif
inline constexpr size_t __platform_wait_alignment
= __alignof__(__platform_wait_t);
#endif