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>