From 6d6b93afdcf1851b0d034864b0cb1b79633c54d7 Mon Sep 17 00:00:00 2001 From: JulianHolzwarth Date: Fri, 12 Jul 2019 16:21:16 +0200 Subject: [PATCH] sys/xtimer/xtimer.c: new function xtimer_rmutex_lock_timeout() function tries to acquire a mutex within a timeout --- sys/xtimer/xtimer.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sys/xtimer/xtimer.c b/sys/xtimer/xtimer.c index a721431680..7b14001caa 100644 --- a/sys/xtimer/xtimer.c +++ b/sys/xtimer/xtimer.c @@ -24,6 +24,7 @@ #include "xtimer.h" #include "mutex.h" +#include "rmutex.h" #include "thread.h" #include "irq.h" #include "div.h" @@ -270,6 +271,20 @@ int xtimer_mutex_lock_timeout(mutex_t *mutex, uint64_t timeout) return -mt.dequeued; } +int xtimer_rmutex_lock_timeout(rmutex_t *rmutex, uint64_t timeout) +{ + if (rmutex_trylock(rmutex)) { + return 0; + } + if (xtimer_mutex_lock_timeout(&rmutex->mutex, timeout) == 0) { + atomic_store_explicit(&rmutex->owner, + thread_getpid(), memory_order_relaxed); + rmutex->refcount++; + return 0; + } + return -1; +} + #ifdef MODULE_CORE_THREAD_FLAGS static void _set_timeout_flag_callback(void* arg) {