Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Nov 2010 06:11:39 +0000 (UTC)
From:      David Xu <davidxu@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r214770 - user/davidxu/libthr/lib/libthr/thread
Message-ID:  <201011040611.oA46BdAO046023@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: davidxu
Date: Thu Nov  4 06:11:39 2010
New Revision: 214770
URL: http://svn.freebsd.org/changeset/base/214770

Log:
  Cancel thread when it is not signaled by others.

Modified:
  user/davidxu/libthr/lib/libthr/thread/thr_cond.c

Modified: user/davidxu/libthr/lib/libthr/thread/thr_cond.c
==============================================================================
--- user/davidxu/libthr/lib/libthr/thread/thr_cond.c	Thu Nov  4 06:06:41 2010	(r214769)
+++ user/davidxu/libthr/lib/libthr/thread/thr_cond.c	Thu Nov  4 06:11:39 2010	(r214770)
@@ -193,11 +193,16 @@ cond_wait_common(pthread_cond_t *cond, p
 	} else {
 		ret = _thr_ucond_wait(&cv->c_kerncv, &m->m_lock, tsp, CVWAIT_BIND_MUTEX);
 	}
-	if (ret == EINTR)
-		ret = 0;
-	if (ret == 0 || ret == ETIMEDOUT)
-		return _mutex_cv_lock(mutex, recurse);
-	else {
+
+	if (ret == 0) {
+		_mutex_cv_lock(mutex, recurse);
+	} else if (ret == EINTR || ret == ETIMEDOUT) {
+		_mutex_cv_lock(mutex, recurse);
+		if (cancel)
+			_thr_testcancel(curthread);
+		if (ret == EINTR)
+			ret = 0;
+	} else {
 		/* We know that it didn't unlock the mutex. */
 		_mutex_cv_attach(mutex, recurse);
 		if (cancel)



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