Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Dec 2016 09:43:49 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r310016 - stable/11/lib/libthr/thread
Message-ID:  <201612130943.uBD9hnCN041646@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Tue Dec 13 09:43:49 2016
New Revision: 310016
URL: https://svnweb.freebsd.org/changeset/base/310016

Log:
  MFC r309630:
  Do not leak curthread->inact_mtx when cancelling in pthread_cond_wait(3).

Modified:
  stable/11/lib/libthr/thread/thr_cond.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/lib/libthr/thread/thr_cond.c
==============================================================================
--- stable/11/lib/libthr/thread/thr_cond.c	Tue Dec 13 09:17:30 2016	(r310015)
+++ stable/11/lib/libthr/thread/thr_cond.c	Tue Dec 13 09:43:49 2016	(r310016)
@@ -224,16 +224,26 @@ cond_wait_kernel(struct pthread_cond *cv
 		 * state and unlock the mutex without making the state
 		 * consistent and the state will be unrecoverable.
 		 */
-		if (error2 == 0 && cancel)
+		if (error2 == 0 && cancel) {
+			if (robust) {
+				_mutex_leave_robust(curthread, mp);
+				robust = false;
+			}
 			_thr_testcancel(curthread);
+		}
 
 		if (error == EINTR)
 			error = 0;
 	} else {
 		/* We know that it didn't unlock the mutex. */
 		_mutex_cv_attach(mp, recurse);
-		if (cancel)
+		if (cancel) {
+			if (robust) {
+				_mutex_leave_robust(curthread, mp);
+				robust = false;
+			}
 			_thr_testcancel(curthread);
+		}
 		error2 = 0;
 	}
 	if (robust)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612130943.uBD9hnCN041646>