[PATCH 2/6] Fix possible exit on error without releasing mutex

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux