aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/threading/mutex.c5
-rw-r--r--src/libstrongswan/utils.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/src/libstrongswan/threading/mutex.c b/src/libstrongswan/threading/mutex.c
index 9c05ff044..a35695624 100644
--- a/src/libstrongswan/threading/mutex.c
+++ b/src/libstrongswan/threading/mutex.c
@@ -253,6 +253,11 @@ static void _wait(private_condvar_t *this, private_mutex_t *mutex)
}
}
+/* use the monotonic clock based version of this function if available */
+#ifdef HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC
+#define pthread_cond_timedwait pthread_cond_timedwait_monotonic
+#endif
+
/**
* Implementation of condvar_t.timed_wait_abs.
*/
diff --git a/src/libstrongswan/utils.c b/src/libstrongswan/utils.c
index a3cb87056..e331ac0d0 100644
--- a/src/libstrongswan/utils.c
+++ b/src/libstrongswan/utils.c
@@ -167,7 +167,9 @@ bool mkdir_p(const char *path, mode_t mode)
*/
time_t time_monotonic(timeval_t *tv)
{
-#if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_CONDATTR_CLOCK_MONOTONIC)
+#if defined(HAVE_CLOCK_GETTIME) && \
+ (defined(HAVE_CONDATTR_CLOCK_MONOTONIC) || \
+ defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
/* as we use time_monotonic() for condvar operations, we use the
* monotonic time source only if it is also supported by pthread. */
timespec_t ts;
@@ -181,7 +183,7 @@ time_t time_monotonic(timeval_t *tv)
}
return ts.tv_sec;
}
-#endif /* HAVE_CLOCK_MONOTONIC && HAVE_CONDATTR_CLOCK_MONOTONIC */
+#endif /* HAVE_CLOCK_GETTIME && (...) */
/* Fallback to non-monotonic timestamps:
* On MAC OS X, creating monotonic timestamps is rather difficult. We
* could use mach_absolute_time() and catch sleep/wakeup notifications.