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