https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127757
--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-16 branch has been updated by Jonathan Wakely <[email protected]>: https://gcc.gnu.org/g:a971455d8f2b672d87297226f68e3a4f2019ec28 commit r16-9793-ga971455d8f2b672d87297226f68e3a4f2019ec28 Author: Jonathan Wakely <[email protected]> Date: Wed Oct 7 17:54:54 2026 +0100 libstdc++: Fix missed atomic notifying operations [PR127757] As described in the PR we can get missed wakes for atomic wait/notify operations, due to the notifier thread thinking there are no waiters and eliding the futex wake syscall. Without the full fence added by this commit the notifying thread can load _M_waiters == 0 and the waiting thread can load the old value of the atomic object, so the waiter blocks but the notifier doesn't notify. The full fence with seq_cst ordering ensures that either the waiter thread sees the new value of the atomic object or the notifier sees a non-zero count of waiters. An LLM was used to modify the original testcase so that it uses less memory and completes faster. Assisted-by: LLM libstdc++-v3/ChangeLog: PR libstdc++/127757 * src/c++20/atomic.cc (__waitable_state::_M_enter_wait): Add comment. (__waitable_state::_M_waiting): Add seq_cst fence and comments. * testsuite/29_atomics/atomic/wait_notify/127757.cc: New test. Reviewed-by: Tomasz KamiÅski <[email protected]> (cherry picked from commit 05ac72feea409f96c2b690a6f064171e274c8f91)
