From 0906671a7b17d7218c7f3acf0bcd991712dafd35 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 27 Aug 2019 15:48:29 +0300 Subject: [PATCH] posix: pthread: pthread_mutex_timedlock should accept absolute deadline It was coded as if it accepts relative timeout. Normative reference: http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_timedlock.html Signed-off-by: Paul Sokolovsky --- include/posix/pthread.h | 2 +- lib/posix/pthread_mutex.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/posix/pthread.h b/include/posix/pthread.h index cd96f26ac7c..fc75eaa7c4d 100644 --- a/include/posix/pthread.h +++ b/include/posix/pthread.h @@ -224,7 +224,7 @@ int pthread_mutex_unlock(pthread_mutex_t *m); */ int pthread_mutex_timedlock(pthread_mutex_t *m, - const struct timespec *to); + const struct timespec *abstime); /** * @brief POSIX threading compatibility API diff --git a/lib/posix/pthread_mutex.c b/lib/posix/pthread_mutex.c index 414ad349acc..531092b7de1 100644 --- a/lib/posix/pthread_mutex.c +++ b/lib/posix/pthread_mutex.c @@ -9,6 +9,8 @@ #include #include +s64_t timespec_to_timeoutms(const struct timespec *abstime); + #define MUTEX_MAX_REC_LOCK 32767 /* @@ -73,9 +75,10 @@ int pthread_mutex_trylock(pthread_mutex_t *m) * See IEEE 1003.1 */ int pthread_mutex_timedlock(pthread_mutex_t *m, - const struct timespec *to) + const struct timespec *abstime) { - return acquire_mutex(m, _ts_to_ms(to)); + s32_t timeout = (s32_t)timespec_to_timeoutms(abstime); + return acquire_mutex(m, timeout); } /**