32inline int do_wait(Atomic &futex,
typename Atomic::Type expectedValue, _umtx_time *tmp =
nullptr)
37 int op = UMTX_OP_WAIT_UINT_PRIVATE;
38 if (
sizeof(futex) >
sizeof(quint32))
42 void *uaddr =
reinterpret_cast<
void *>(tmp ?
sizeof(*tmp) : 0);
44 int ret = _umtx_op(&futex, op, u_long(expectedValue), uaddr, uaddr2);
56inline bool futexWait(Atomic &futex,
typename Atomic::Type expectedValue, QDeadlineTimer timer)
58 struct _umtx_time tm = {};
59 auto deadline = timer.deadline<
std::chrono::steady_clock>();
60 tm._timeout = durationToTimespec(deadline.time_since_epoch());
61 tm._flags = UMTX_ABSTIME;
62 tm._clockid = CLOCK_MONOTONIC;
63 int r = do_wait(futex, expectedValue, &tm);
64 return r == 0 || errno != ETIMEDOUT;