From: Michael Jeanson Date: Fri, 7 May 2021 15:34:33 +0000 (-0400) Subject: fix: clock_gettime on macOs X-Git-Tag: v0.13.0~7 X-Git-Url: http://git.liburcu.org/?a=commitdiff_plain;ds=sidebyside;h=86e8ab17bc98f890f7da1aa5af6ad9038820c618;p=urcu.git fix: clock_gettime on macOs Newer version of macOs have an implementation of clock_gettime() that requires additionnal setup, move the platform specific code first so it is always used. Change-Id: I12fcdeff6c0ae59bc1a13f4e2cd7f4ebcedfc253 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- diff --git a/include/urcu/arch/generic.h b/include/urcu/arch/generic.h index 4b56ed7..be6e41e 100644 --- a/include/urcu/arch/generic.h +++ b/include/urcu/arch/generic.h @@ -153,8 +153,11 @@ extern "C" { #ifndef HAS_CAA_GET_CYCLES #define HAS_CAA_GET_CYCLES -#ifdef CONFIG_RCU_HAVE_CLOCK_GETTIME +#if defined(__APPLE__) +#include +#include +#include #include #include @@ -162,18 +165,21 @@ typedef uint64_t caa_cycles_t; static inline caa_cycles_t caa_get_cycles (void) { - struct timespec ts; + mach_timespec_t ts = { 0, 0 }; + static clock_serv_t clock_service; - if (caa_unlikely(clock_gettime(CLOCK_MONOTONIC, &ts))) + if (caa_unlikely(!clock_service)) { + if (host_get_clock_service(mach_host_self(), + SYSTEM_CLOCK, &clock_service)) + return -1ULL; + } + if (caa_unlikely(clock_get_time(clock_service, &ts))) return -1ULL; return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec; } -#elif defined(__APPLE__) +#elif defined(CONFIG_RCU_HAVE_CLOCK_GETTIME) -#include -#include -#include #include #include @@ -181,15 +187,9 @@ typedef uint64_t caa_cycles_t; static inline caa_cycles_t caa_get_cycles (void) { - mach_timespec_t ts = { 0, 0 }; - static clock_serv_t clock_service; + struct timespec ts; - if (caa_unlikely(!clock_service)) { - if (host_get_clock_service(mach_host_self(), - SYSTEM_CLOCK, &clock_service)) - return -1ULL; - } - if (caa_unlikely(clock_get_time(clock_service, &ts))) + if (caa_unlikely(clock_gettime(CLOCK_MONOTONIC, &ts))) return -1ULL; return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec; }