This fixes a logic error in the futex-based timed wait. Signed-off-by: Jonathan Wakely <jwak...@redhat.com>
libstdc++-v3/ChangeLog: * include/bits/atomic_timed_wait.h (__platform_wait_until_impl): Return false for ETIMEDOUT and true otherwise. Tested x86_64-linux. I'm not seeing any tests fail as a result of this, btu it does seem to be incorrect. Please check my working.
commit 94dc544bbf42e95a363b916ed0d665afcfcccc88 Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Aug 31 10:20:41 2021 libstdc++: Fix return values for atomic wait on futex This fixes a logic error in the futex-based timed wait. Signed-off-by: Jonathan Wakely <jwak...@redhat.com> libstdc++-v3/ChangeLog: * include/bits/atomic_timed_wait.h (__platform_wait_until_impl): Return false for ETIMEDOUT and true otherwise. diff --git a/libstdc++-v3/include/bits/atomic_timed_wait.h b/libstdc++-v3/include/bits/atomic_timed_wait.h index 3db08f82707..d423a7af7c3 100644 --- a/libstdc++-v3/include/bits/atomic_timed_wait.h +++ b/libstdc++-v3/include/bits/atomic_timed_wait.h @@ -101,12 +101,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__e) { - if ((errno != ETIMEDOUT) && (errno != EINTR) - && (errno != EAGAIN)) + if (errno == ETIMEDOUT) + return false; + if (errno != EINTR && errno != EAGAIN) __throw_system_error(errno); - return true; } - return false; + return true; } // returns true if wait ended before timeout