[PATCH 3/3] libmultipath: tur: protect pthread_cond_timedwait with a loop

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

 



From: Martin Wilck <mwilck@xxxxxxxx>

Defect reported by coverity (413383 Data race condition)

Signed-off-by: Martin Wilck <mwilck@xxxxxxxx>
---
 libmultipath/checkers/tur.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c
index eb2fca1..2800446 100644
--- a/libmultipath/checkers/tur.c
+++ b/libmultipath/checkers/tur.c
@@ -438,9 +438,12 @@ int libcheck_check(struct checker * c)
 		}
 		tur_timeout(&tsp);
 		pthread_mutex_lock(&ct->lock);
-		if (ct->state == PATH_PENDING && ct->msgid == MSG_TUR_RUNNING)
-			r = pthread_cond_timedwait(&ct->active, &ct->lock,
-						   &tsp);
+
+		for (r = 0;
+		     r == 0 && ct->state == PATH_PENDING &&
+			     ct->msgid == MSG_TUR_RUNNING;
+		     r = pthread_cond_timedwait(&ct->active, &ct->lock, &tsp));
+
 		if (!r) {
 			tur_status = ct->state;
 			c->msgid = ct->msgid;
-- 
2.43.0





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux