From 6cf83e2b8b91315daaf30dc22f610af68c6d672c Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Wed, 22 May 2019 09:45:47 +0200 Subject: [PATCH] deactivate clock_gettime on SunOS, as it does not work for threads. CLOCK_THREAD_CPUTIME_ID is declared, but is unimplemented, execution fails and we don't check it. This can be checked by the absence of _POSIX_THREAD_CPUTIME in unistd.h Sadly, deactivating posix_gettime only for thread timers is not practical in xbt, so just default to another for all timers. --- src/xbt/xbt_os_time.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/xbt/xbt_os_time.c b/src/xbt/xbt_os_time.c index 087c662609..854c09f796 100644 --- a/src/xbt/xbt_os_time.c +++ b/src/xbt/xbt_os_time.c @@ -16,6 +16,8 @@ #ifdef _WIN32 #include #include +#else +#include #endif //Freebsd doesn't provide this clock_gettime flag yet, because it was added too recently (after 1993) @@ -140,7 +142,7 @@ void xbt_os_timer_free(xbt_os_timer_t timer) double xbt_os_timer_elapsed(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) return ((double) timer->stop.tv_sec) - ((double) timer->start.tv_sec) + ((double) timer->elapse.tv_sec ) + ((((double) timer->stop.tv_nsec) - ((double) timer->start.tv_nsec) + ((double) timer->elapse.tv_nsec )) / 1e9); #elif HAVE_GETTIMEOFDAY || defined(_WIN32) @@ -154,7 +156,7 @@ double xbt_os_timer_elapsed(xbt_os_timer_t timer) void xbt_os_walltimer_start(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) timer->elapse.tv_sec = 0; timer->elapse.tv_nsec = 0; clock_gettime(CLOCK_REALTIME, &(timer->start)); @@ -176,7 +178,7 @@ void xbt_os_walltimer_start(xbt_os_timer_t timer) void xbt_os_walltimer_resume(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) timer->elapse.tv_sec += timer->stop.tv_sec - timer->start.tv_sec; timer->elapse.tv_nsec += timer->stop.tv_nsec - timer->start.tv_nsec; @@ -199,7 +201,7 @@ void xbt_os_walltimer_resume(xbt_os_timer_t timer) void xbt_os_walltimer_stop(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) clock_gettime(CLOCK_REALTIME, &(timer->stop)); #elif HAVE_GETTIMEOFDAY gettimeofday(&(timer->stop), NULL); @@ -214,7 +216,7 @@ void xbt_os_walltimer_stop(xbt_os_timer_t timer) void xbt_os_cputimer_start(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) timer->elapse.tv_sec = 0; timer->elapse.tv_nsec = 0; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &(timer->start)); @@ -234,7 +236,7 @@ void xbt_os_cputimer_start(xbt_os_timer_t timer) void xbt_os_cputimer_resume(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) timer->elapse.tv_sec += timer->stop.tv_sec - timer->start.tv_sec; timer->elapse.tv_nsec += timer->stop.tv_nsec - timer->start.tv_nsec; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &(timer->start)); @@ -254,7 +256,7 @@ void xbt_os_cputimer_resume(xbt_os_timer_t timer) void xbt_os_cputimer_stop(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &(timer->stop)); #elif HAVE_GETTIMEOFDAY gettimeofday(&(timer->stop), NULL); @@ -268,7 +270,7 @@ void xbt_os_cputimer_stop(xbt_os_timer_t timer) void xbt_os_threadtimer_start(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) timer->elapse.tv_sec = 0; timer->elapse.tv_nsec = 0; clock_gettime(CLOCK_THREAD_CPUTIME_ID, &(timer->start)); @@ -295,7 +297,7 @@ void xbt_os_threadtimer_start(xbt_os_timer_t timer) void xbt_os_threadtimer_resume(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) timer->elapse.tv_sec += timer->stop.tv_sec - timer->start.tv_sec; timer->elapse.tv_nsec += timer->stop.tv_nsec - timer->start.tv_nsec; clock_gettime(CLOCK_THREAD_CPUTIME_ID, &(timer->start)); @@ -324,7 +326,7 @@ void xbt_os_threadtimer_resume(xbt_os_timer_t timer) void xbt_os_threadtimer_stop(xbt_os_timer_t timer) { -#if HAVE_POSIX_GETTIME +#if HAVE_POSIX_GETTIME && defined (_POSIX_THREAD_CPUTIME) clock_gettime(CLOCK_THREAD_CPUTIME_ID, &(timer->stop)); #elif HAVE_GETTIMEOFDAY && defined(__MACH__) && defined(__APPLE__) mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT; -- 2.20.1