mutex: move pthread_cond_signal() outside of lock
authorJens Axboe <axboe@fb.com>
Tue, 8 Jul 2014 07:46:37 +0000 (09:46 +0200)
committerJens Axboe <axboe@fb.com>
Tue, 8 Jul 2014 07:46:37 +0000 (09:46 +0200)
Generally best practice to drop the lock before waking, if
possible.

Signed-off-by: Jens Axboe <axboe@fb.com>
mutex.c

diff --git a/mutex.c b/mutex.c
index 9d10c2ce2fe056fefd300ebf16274f85701fa7c6..9ee3bd838cb1ae801b71f2604f94441264130343 100644 (file)
--- a/mutex.c
+++ b/mutex.c
@@ -162,14 +162,19 @@ void fio_mutex_down(struct fio_mutex *mutex)
 
 void fio_mutex_up(struct fio_mutex *mutex)
 {
+       int do_wake = 0;
+
        assert(mutex->magic == FIO_MUTEX_MAGIC);
 
        pthread_mutex_lock(&mutex->lock);
        read_barrier();
        if (!mutex->value && mutex->waiters)
-               pthread_cond_signal(&mutex->cond);
+               do_wake = 1;
        mutex->value++;
        pthread_mutex_unlock(&mutex->lock);
+
+       if (do_wake)
+               pthread_cond_signal(&mutex->cond);
 }
 
 void fio_rwlock_write(struct fio_rwlock *lock)