diff --git a/src/libstrongswan/threading/mutex.c b/src/libstrongswan/threading/mutex.c index 70db30f21..888f11df0 100644 --- a/src/libstrongswan/threading/mutex.c +++ b/src/libstrongswan/threading/mutex.c @@ -337,7 +337,7 @@ condvar_t *condvar_create(condvar_type_t type) pthread_condattr_t condattr; pthread_condattr_init(&condattr); #ifdef HAVE_CONDATTR_CLOCK_MONOTONIC - pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC); + pthread_condattr_setclock(&condattr, TIME_CLOCK_ID); #endif pthread_cond_init(&this->condvar, &condattr); pthread_condattr_destroy(&condattr); diff --git a/src/libstrongswan/utils/utils/time.c b/src/libstrongswan/utils/utils/time.c index d96c918da..c1e055e91 100644 --- a/src/libstrongswan/utils/utils/time.c +++ b/src/libstrongswan/utils/utils/time.c @@ -52,7 +52,7 @@ time_t time_monotonic(timeval_t *tv) * monotonic time source only if it is also supported by pthread. */ timespec_t ts; - if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) + if (clock_gettime(TIME_CLOCK_ID, &ts) == 0) { if (tv) { diff --git a/src/libstrongswan/utils/utils/time.h b/src/libstrongswan/utils/utils/time.h index 2e210fbef..9fac77729 100644 --- a/src/libstrongswan/utils/utils/time.h +++ b/src/libstrongswan/utils/utils/time.h @@ -32,6 +32,20 @@ */ #define TIME_32_BIT_SIGNED_MAX 0x7fffffff +/** + * The clock that should be used for time_monotonic() and conditional variables + */ +#ifdef HAVE_CLOCK_GETTIME +#ifdef HAVE_CONDATTR_CLOCK_MONOTONIC +/* only can use different clocks if we can set it via attribute */ +#ifndef TIME_CLOCK_ID +#define TIME_CLOCK_ID CLOCK_MONOTONIC +#endif +#else +#define TIME_CLOCK_ID CLOCK_MONOTONIC +#endif +#endif + /** * Handle struct timeval like an own type. */