X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=mutex.c;h=63229eda09d62084f2b3e7a4cb076fcdf2e0dc88;hb=f2cd91604af170e972438c461a40230e266a57d9;hp=e5b045ec91bc0348234eff8cf3f5ff265a9253cf;hpb=4e1cc8e6ddf90e4e2fa5eab27cca4110e4dce1bb;p=fio.git diff --git a/mutex.c b/mutex.c index e5b045ec..63229eda 100644 --- a/mutex.c +++ b/mutex.c @@ -47,7 +47,7 @@ int cond_init_pshared(pthread_cond_t *cond) return ret; } -#ifdef FIO_HAVE_PSHARED_MUTEX +#ifdef CONFIG_PSHARED ret = pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_SHARED); if (ret) { log_err("pthread_condattr_setpshared: %s\n", strerror(ret)); @@ -77,7 +77,7 @@ int mutex_init_pshared(pthread_mutex_t *mutex) /* * Not all platforms support process shared mutexes (FreeBSD) */ -#ifdef FIO_HAVE_PSHARED_MUTEX +#ifdef CONFIG_PSHARED ret = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); if (ret) { log_err("pthread_mutexattr_setpshared: %s\n", strerror(ret)); @@ -141,28 +141,33 @@ struct fio_mutex *fio_mutex_init(int value) return NULL; } -static bool mutex_timed_out(struct timeval *t, unsigned int msecs) +static bool mutex_timed_out(struct timespec *t, unsigned int msecs) { - struct timeval now; + struct timeval tv; + struct timespec now; + + gettimeofday(&tv, NULL); + now.tv_sec = tv.tv_sec; + now.tv_nsec = tv.tv_usec * 1000; - gettimeofday(&now, NULL); return mtime_since(t, &now) >= msecs; } int fio_mutex_down_timeout(struct fio_mutex *mutex, unsigned int msecs) { struct timeval tv_s; + struct timespec base; struct timespec t; int ret = 0; assert(mutex->magic == FIO_MUTEX_MAGIC); gettimeofday(&tv_s, NULL); - t.tv_sec = tv_s.tv_sec; - t.tv_nsec = tv_s.tv_usec * 1000; + base.tv_sec = t.tv_sec = tv_s.tv_sec; + base.tv_nsec = t.tv_nsec = tv_s.tv_usec * 1000; t.tv_sec += msecs / 1000; - t.tv_nsec += ((msecs * 1000000) % 1000000000); + t.tv_nsec += ((msecs * 1000000ULL) % 1000000000); if (t.tv_nsec >= 1000000000) { t.tv_nsec -= 1000000000; t.tv_sec++; @@ -177,7 +182,7 @@ int fio_mutex_down_timeout(struct fio_mutex *mutex, unsigned int msecs) * way too early, double check. */ ret = pthread_cond_timedwait(&mutex->cond, &mutex->lock, &t); - if (ret == ETIMEDOUT && !mutex_timed_out(&tv_s, msecs)) + if (ret == ETIMEDOUT && !mutex_timed_out(&base, msecs)) ret = 0; } mutex->waiters--; @@ -287,7 +292,7 @@ struct fio_rwlock *fio_rwlock_init(void) log_err("pthread_rwlockattr_init: %s\n", strerror(ret)); goto err; } -#ifdef FIO_HAVE_PSHARED_MUTEX +#ifdef CONFIG_PSHARED ret = pthread_rwlockattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); if (ret) { log_err("pthread_rwlockattr_setpshared: %s\n", strerror(ret));