libstdc++: Fix wrong thread waking on notify [PR100334]
authorThomas Rodgers <rodgert@twrodgers.com>
Mon, 17 May 2021 18:41:26 +0000 (11:41 -0700)
committerThomas Rodgers <rodgert@twrodgers.com>
Mon, 17 May 2021 19:05:06 +0000 (12:05 -0700)
commit346cbaf57828aef190de93271c0eb3f10c9aca61
tree7480a5ab7ce1b1e9bfacc9e277517e8be1f33027
parent58f7c7e098b79c96403c8341823ec3ba1e8b3945
libstdc++: Fix wrong thread waking on notify [PR100334]

Fixes https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100334

libstdc++-v3/ChangeLog:
* include/bits/atomic_wait.h (__waiter::_M_do_wait_v): loop
until value change observed.
(__waiter_base::_M_laundered): New member.
(__waiter_base::_M_notify): Check _M_laundered to determine
whether to wake one or all.
(__detail::__atomic_compare): Return true if call to
__builtin_memcmp() == 0.
(__waiter_base::_S_do_spin_v): Adjust predicate.
* testsuite/29_atomics/atomic/wait_notify/100334.cc: New
test.
libstdc++-v3/include/bits/atomic_wait.h
libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/100334.cc [new file with mode: 0644]