X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=mutex.c;h=63229eda09d62084f2b3e7a4cb076fcdf2e0dc88;hb=7746976c9230e7b3349ad27136b0cd8784f0c405;hp=9fab715bd7429e87b2690000d49a69bbaea3785a;hpb=8b6a404cdd2c40715885e562416c3db039912773;p=fio.git diff --git a/mutex.c b/mutex.c index 9fab715b..63229eda 100644 --- a/mutex.c +++ b/mutex.c @@ -156,14 +156,15 @@ static bool mutex_timed_out(struct timespec *t, unsigned int 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 * 1000000ULL) % 1000000000); @@ -181,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(&t, msecs)) + if (ret == ETIMEDOUT && !mutex_timed_out(&base, msecs)) ret = 0; } mutex->waiters--;