From 4010c3bce2a8141d614b11e49780b11b575e6b4d Mon Sep 17 00:00:00 2001 From: John Kacur Date: Tue, 30 Jun 2015 23:46:34 +0200 Subject: Fix possible exit on error without releasing mutex 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 --- 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 aaa36c3..1d1cc58 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; } -- cgit 1.2.3-korg