On 24/02/20 21:53 -0500, Thomas Rodgers wrote:
+ bool + _S_futex_wait_until(int* __addr, int __val, + bool __has_timeout = false, + std::chrono::seconds __s = std::chrono::seconds::zero(), + std::chrono::nanoseconds __ns = std::chrono::nanoseconds::zero()) + { + if (!__has_timeout) + { + syscall (SYS_futex, __addr, 0, __val, nullptr); + // Can't do anything about an error here except abort, so ignore it. + } + else + { + struct timeval __tv; + gettimeofday(&__tv, NULL); + struct timespec __rt; + __rt.tv_sec = __s.count() - __tv.tv_sec; + __rt.tv_nsec = __ns.count() - __tv.tv_usec * 1000; + if (__rt.tv_nsec < 0) + { + __rt.tv_nsec += 1000000000; + --__rt.tv_sec; + } + if (__rt.tv_sec < 0) + return false; + + if (syscall (SYS_futex, __addr, 0, __val, &__rt) == -1)
This syscall has the same problem as https://gcc.gnu.org/PR93421 so we should avoid introducing a new instance of the bug.