tp: move pthread_cond_signal() outside of lock
authorJens Axboe <axboe@fb.com>
Tue, 8 Jul 2014 07:45:55 +0000 (09:45 +0200)
committerJens Axboe <axboe@fb.com>
Tue, 8 Jul 2014 07:45:55 +0000 (09:45 +0200)
Signed-off-by: Jens Axboe <axboe@fb.com>
lib/tp.c

index ec52db6da3f98a436a2a09381e42e9e5da35ead7..386e31afc3f0d664e5ae68dbddd7ac119064217e 100644 (file)
--- a/lib/tp.c
+++ b/lib/tp.c
@@ -63,8 +63,9 @@ void tp_queue_work(struct tp_data *tdat, struct tp_work *work)
 
        pthread_mutex_lock(&tdat->lock);
        flist_add_tail(&work->list, &tdat->work);
-       pthread_cond_signal(&tdat->cv);
        pthread_mutex_unlock(&tdat->lock);
+
+       pthread_cond_signal(&tdat->cv);
 }
 
 void tp_init(struct tp_data **tdatp)
@@ -94,11 +95,12 @@ void tp_exit(struct tp_data **tdatp)
        if (!tdat)
                return;
 
-       tdat->thread_exit = 1;
        pthread_mutex_lock(&tdat->lock);
-       pthread_cond_signal(&tdat->cv);
+       tdat->thread_exit = 1;
        pthread_mutex_unlock(&tdat->lock);
 
+       pthread_cond_signal(&tdat->cv);
+
        pthread_join(tdat->thread, &ret);
 
        sfree(tdat);