Mesa (master): util: futex fixes for OpenBSD
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Aug 31 09:28:27 UTC 2020
Module: Mesa
Branch: master
Commit: c66c5b38e0ad136aa9301fd60aafea736d433c57
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c66c5b38e0ad136aa9301fd60aafea736d433c57
Author: Jonathan Gray <jsg at jsg.id.au>
Date: Thu Feb 20 13:18:01 2020 +1100
util: futex fixes for OpenBSD
Fix absolute to relative timeout computation.
Add sanity checks to futex_wait()
- handle the NULL timeout pointer case
- avoid negative cases.
>From Matthieu Herrb and Scott Cheloha.
Fixes: c91997b6c43 ("util/futex: use futex syscall on OpenBSD")
Signed-off-by: Jonathan Gray <jsg at jsg.id.au>
Acked-by: Eric Engestrom <eric at engestrom.ch>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5630>
---
src/util/futex.h | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/util/futex.h b/src/util/futex.h
index 4d712e2ef2d..43097f4cd5b 100644
--- a/src/util/futex.h
+++ b/src/util/futex.h
@@ -100,9 +100,16 @@ static inline int futex_wake(uint32_t *addr, int count)
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);
+ struct timespec tsnow, tsrel;
+
+ if (timeout == NULL)
+ return futex(addr, FUTEX_WAIT, value, NULL, NULL);
+
+ clock_gettime(CLOCK_MONOTONIC, &tsnow);
+ if (timespeccmp(&tsnow, timeout, <))
+ timespecsub(timeout, &tsnow, &tsrel);
+ else
+ timespecclear(&tsrel);
return futex(addr, FUTEX_WAIT, value, &tsrel, NULL);
}
More information about the mesa-commit
mailing list