From: Jens Axboe Date: Mon, 20 Feb 2012 08:18:43 +0000 (+0100) Subject: mutex: don't attempt to use CLOCK_MONOTONIC X-Git-Tag: fio-2.0.4~23 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=b11e4ccf7b3d24e8e1d0a779aa6735bbce85b291;hp=649c10c59b016ae8586e54746d3761bc6df33c9b mutex: don't attempt to use CLOCK_MONOTONIC It's a bit of a mess. Some platforms don't have pthread_condattr_setclock(), some have it but it appears NOT to set the block correctly. Accept that we have to use the realtime clock for timed mutex and just don't touch the clock settings. Signed-off-by: Jens Axboe --- diff --git a/mutex.c b/mutex.c index 94e11884..3b94beff 100644 --- a/mutex.c +++ b/mutex.c @@ -17,8 +17,6 @@ #include "time.h" #include "gettime.h" -static clockid_t fio_clk_id = CLOCK_REALTIME; - void fio_mutex_remove(struct fio_mutex *mutex) { pthread_cond_destroy(&mutex->cond); @@ -63,9 +61,6 @@ struct fio_mutex *fio_mutex_init(int value) pthread_condattr_init(&cond); #ifdef FIO_HAVE_PSHARED_MUTEX pthread_condattr_setpshared(&cond, PTHREAD_PROCESS_SHARED); -#endif -#ifdef FIO_HAVE_PTHREAD_CONDATTR_SETCLOCK - pthread_condattr_setclock(&cond, fio_clk_id); #endif pthread_cond_init(&mutex->cond, &cond); @@ -97,10 +92,9 @@ int fio_mutex_down_timeout(struct fio_mutex *mutex, unsigned int seconds) struct timespec t; int ret = 0; - fio_gettime(&tv_s, NULL); - - clock_gettime(fio_clk_id, &t); - t.tv_sec += seconds; + gettimeofday(&tv_s, NULL); + t.tv_sec = tv_s.tv_sec + seconds; + t.tv_nsec = tv_s.tv_usec * 1000; pthread_mutex_lock(&mutex->lock); @@ -199,19 +193,3 @@ void fio_mutex_up_write(struct fio_mutex *mutex) pthread_cond_signal(&mutex->cond); pthread_mutex_unlock(&mutex->lock); } - -static void fio_init fio_mutex_global_init(void) -{ -#ifdef FIO_HAVE_PTHREAD_CONDATTR_SETCLOCK -#ifdef FIO_HAVE_CLOCK_MONOTONIC - pthread_condattr_t cond; - - pthread_condattr_init(&cond); - - if (!pthread_condattr_setclock(&cond, CLOCK_MONOTONIC)) - fio_clk_id = CLOCK_MONOTONIC; - - pthread_condattr_destroy(&cond); -#endif -#endif -} diff --git a/os/os-aix.h b/os/os-aix.h index 3cbc80f3..2f75bf8f 100644 --- a/os/os-aix.h +++ b/os/os-aix.h @@ -14,7 +14,6 @@ #define FIO_HAVE_ODIRECT #define FIO_USE_GENERIC_RAND #define FIO_HAVE_CLOCK_MONOTONIC -#define FIO_HAVE_PTHREAD_CONDATTR_SETCLOCK /* * This is broken on AIX if _LARGE_FILES is defined... diff --git a/os/os-freebsd.h b/os/os-freebsd.h index 976bd842..9fbc6236 100644 --- a/os/os-freebsd.h +++ b/os/os-freebsd.h @@ -19,7 +19,6 @@ #define FIO_HAVE_CHARDEV_SIZE #define FIO_HAVE_GETTID #define FIO_HAVE_CLOCK_MONOTONIC -#define FIO_HAVE_PTHREAD_CONDATTR_SETCLOCK #define OS_MAP_ANON MAP_ANON diff --git a/os/os-linux.h b/os/os-linux.h index 61dfa303..9f547fff 100644 --- a/os/os-linux.h +++ b/os/os-linux.h @@ -44,7 +44,6 @@ #define FIO_HAVE_TRIM #define FIO_HAVE_BINJECT #define FIO_HAVE_CLOCK_MONOTONIC -#define FIO_HAVE_PTHREAD_CONDATTR_SETCLOCK #define FIO_HAVE_GETTID /*