diff --git a/mac/hid.c b/mac/hid.c index 3453b83f8..f01214cdf 100644 --- a/mac/hid.c +++ b/mac/hid.c @@ -83,16 +83,18 @@ static int pthread_barrier_wait(pthread_barrier_t *barrier) { pthread_mutex_lock(&barrier->mutex); ++(barrier->count); - if(barrier->count >= barrier->trip_count) - { + if(barrier->count >= barrier->trip_count) { barrier->count = 0; pthread_cond_broadcast(&barrier->cond); pthread_mutex_unlock(&barrier->mutex); return 1; } - else - { - pthread_cond_wait(&barrier->cond, &(barrier->mutex)); + else { + do { + pthread_cond_wait(&barrier->cond, &(barrier->mutex)); + } + while (!(barrier->count >= barrier->trip_count)); + pthread_mutex_unlock(&barrier->mutex); return 0; }