Coverage tools indicate that there are two spots where the function low_priority() could exit without releasing the mutex. Since the only error that pthread_barrier_wait is supposed to give is EINVAL when the barrier is not an initialized barrier object, the chances of this happinning seem remote. However, if we are going to test for the error and potentially exit, then we should release the mutex too. Signed-off-by: John Kacur <jkacur@xxxxxxxxxx> --- src/pi_tests/pi_stress.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/pi_tests/pi_stress.c b/src/pi_tests/pi_stress.c index aaa36c362445..1d1cc58fae54 100644 --- a/src/pi_tests/pi_stress.c +++ b/src/pi_tests/pi_stress.c @@ -727,17 +727,24 @@ void *low_priority(void *arg) status = pthread_barrier_wait(&p->locked_barrier); if (status && status != PTHREAD_BARRIER_SERIAL_THREAD) { pi_error - ("low_priority[%d]: pthread_barrier_wait(locked): %x\n", - p->id, status); + ("low_priority[%d]: pthread_barrier_wait(locked): %x\n", + p->id, status); + /* release the mutex */ + pi_debug("low_priority[%d]: unlocking mutex\n", p->id); + pthread_mutex_unlock(&p->mutex); return NULL; } + /* wait for priority boost */ pi_debug("low_priority[%d]: entering elevated wait\n", p->id); status = pthread_barrier_wait(&p->elevate_barrier); if (status && status != PTHREAD_BARRIER_SERIAL_THREAD) { pi_error - ("low_priority[%d]: pthread_barrier_wait(elevate): %x\n", - p->id, status); + ("low_priority[%d]: pthread_barrier_wait(elevate): %x\n", + p->id, status); + /* release the mutex */ + pi_debug("low_priority[%d]: unlocking mutex\n", p->id); + pthread_mutex_unlock(&p->mutex); return NULL; } -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html