Signed-off-by: Jens Axboe <axboe@fb.com>
+static void thread_exiting(struct thread_data *thread)
+{
+ __sync_fetch_and_add(&thread->done, 1);
+ pthread_cond_signal(&thread->done_cond);
+}
+
static void *writer_fn(void *data)
{
struct writer_thread *wt = data;
static void *writer_fn(void *data)
{
struct writer_thread *wt = data;
seq = write_work(work);
}
seq = write_work(work);
}
- wt->thread.done = 1;
- pthread_cond_signal(&wt->thread.done_cond);
+ thread_exiting(&wt->thread);
pthread_mutex_unlock(&rt->thread.lock);
if (work) {
pthread_mutex_unlock(&rt->thread.lock);
if (work) {
+ __sync_fetch_and_add(&rt->busy, 1);
+ __sync_fetch_and_sub(&rt->busy, 1);
- rt->thread.done = 1;
- pthread_cond_signal(&rt->thread.done_cond);
+ thread_exiting(&rt->thread);
void fn(struct writer_thread *),
struct writer_thread *wt)
{
void fn(struct writer_thread *),
struct writer_thread *wt)
{
+ __sync_fetch_and_add(&thread->exit, 1);
pthread_cond_signal(&thread->cond);
while (!thread->done) {
pthread_cond_signal(&thread->cond);
while (!thread->done) {