]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Use 32-bit platform wait type for OpenBSD and DragonFly [PR120527]
authorJonathan Wakely <jwakely@redhat.com>
Tue, 25 Nov 2025 14:29:50 +0000 (14:29 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 21 Apr 2026 14:22:34 +0000 (15:22 +0100)
This defines __platform_wait_t as unsigned int for OpenBSD and
DragonFly. This means that std::semaphore will use unsigned int by
default, and so will benefit from more efficient wait/notify ops if we
start to use the OpenBSD futex(2) syscall or the DragonFly umtx(2)
syscalls. We don't currently use them, but if we start to in future, it
would be an ABI break to change __platform_wait_t later.

libstdc++-v3/ChangeLog:

PR libstdc++/120527
* include/bits/atomic_wait.h [__OpenBSD__ || __DragonFly]: Use
unsigned int for __platform_wait_t.

Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
libstdc++-v3/include/bits/atomic_wait.h

index 704c10d5f3825bf1ef6c0a6322e4f13744d9d5be..5224e69817de7f7c0756dc9179b0263cc474cada 100644 (file)
@@ -108,7 +108,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 // a mutex/condvar based wait.
   namespace __detail
   {
-# if ATOMIC_LONG_LOCK_FREE == 2
+# if defined __OpenBSD__ || defined __DragonFly__
+    // These targets provide 32-bit futex-like syscalls.
+    // We don't currently make use of them, but we want to in future.
+    using __platform_wait_t = unsigned int;
+# elif ATOMIC_LONG_LOCK_FREE == 2
     using __platform_wait_t = unsigned long;
 # else
     using __platform_wait_t = unsigned int;