From c91997b6c4395831a8de2b84e6ea2ff981a00e4b Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Sun, 1 Dec 2019 02:19:38 +1100 Subject: [PATCH] util/futex: use futex syscall on OpenBSD MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Make use of the futex syscall added in OpenBSD 6.2. Signed-off-by: Jonathan Gray Signed-off-by: Marek Olšák --- src/util/futex.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/util/futex.h b/src/util/futex.h index 268af92882a..cf8dd0206c9 100644 --- a/src/util/futex.h +++ b/src/util/futex.h @@ -85,6 +85,24 @@ static inline int futex_wait(uint32_t *addr, int32_t value, struct timespec *tim return _umtx_op(addr, UMTX_OP_WAIT_UINT, (uint32_t)value, uaddr, uaddr2) == -1 ? errno : 0; } +#elif defined(__OpenBSD__) + +#include +#include + +static inline int futex_wake(uint32_t *addr, int count) +{ + return futex(addr, FUTEX_WAKE, count, NULL, NULL); +} + +static inline int futex_wait(uint32_t *addr, int32_t value, const struct timespec *timeout) +{ + struct timespec tsrel, tsnow; + clock_gettime(CLOCK_MONOTONIC, &tsnow); + timespecsub(timeout, &tsrel, &tsrel); + return futex(addr, FUTEX_WAIT, value, &tsrel, NULL); +} + #endif #endif /* UTIL_FUTEX_H */ -- 2.30.2