[gcc r16-5307] libstdc++: Minor refactoring in __wait_until_impl in atomic.cc
Jonathan Wakely
redi@gcc.gnu.org
Sat Nov 15 23:56:54 GMT 2025
https://gcc.gnu.org/g:bbbd6a97f3b48af92210a60d58d0a6a3f3952c80
commit r16-5307-gbbbd6a97f3b48af92210a60d58d0a6a3f3952c80
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Fri Nov 14 15:51:52 2025 +0000
libstdc++: Minor refactoring in __wait_until_impl in atomic.cc
libstdc++-v3/ChangeLog:
* src/c++20/atomic.cc (__wait_impl): Fix outdated comment.
(__wait_until_impl): Simplify return statements.
Diff:
---
libstdc++-v3/src/c++20/atomic.cc | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/libstdc++-v3/src/c++20/atomic.cc b/libstdc++-v3/src/c++20/atomic.cc
index 7978809cd223..e280045b619d 100644
--- a/libstdc++-v3/src/c++20/atomic.cc
+++ b/libstdc++-v3/src/c++20/atomic.cc
@@ -278,7 +278,7 @@ __wait_impl(const void* __addr, __wait_args_base& __args)
set_wait_state(__addr, __args); // scoped_wait needs a __waitable_state
scoped_wait s(__args);
__platform_wait(__wait_addr, __args._M_old);
- // We haven't loaded a new value so return false as first member:
+ // We haven't loaded a new value so return _M_has_val=false
return { ._M_val = __args._M_old, ._M_has_val = false, ._M_timeout = false };
#else
waiter_lock l(__args);
@@ -452,20 +452,16 @@ __wait_until_impl(const void* __addr, __wait_args_base& __args,
if (__args & __wait_flags::__track_contention)
set_wait_state(__addr, __args);
scoped_wait s(__args);
- if (__platform_wait_until(__wait_addr, __args._M_old, __atime))
- return { ._M_val = __args._M_old, ._M_has_val = false, ._M_timeout = false };
- else
- return { ._M_val = __args._M_old, ._M_has_val = false, ._M_timeout = true };
+ bool timeout = !__platform_wait_until(__wait_addr, __args._M_old, __atime);
+ return { ._M_val = __args._M_old, ._M_has_val = false, ._M_timeout = timeout };
#else
waiter_lock l(__args);
__platform_wait_t __val;
__atomic_load(__wait_addr, &__val, __args._M_order);
if (__val == __args._M_old)
{
- if (__cond_wait_until(__state->_M_cv, __state->_M_mtx, __atime))
- return { ._M_val = __val, ._M_has_val = false, ._M_timeout = false };
- else
- return { ._M_val = __val, ._M_has_val = false, ._M_timeout = true };
+ bool timeout = !__cond_wait_until(__state->_M_cv, __state->_M_mtx, __atime);
+ return { ._M_val = __val, ._M_has_val = false, ._M_timeout = timeout };
}
return { ._M_val = __val, ._M_has_val = true, ._M_timeout = false };
#endif
More information about the Libstdc++-cvs
mailing list