From owner-svn-src-user@FreeBSD.ORG  Thu Nov  4 06:11:39 2010
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 69D4810656A4;
	Thu,  4 Nov 2010 06:11:39 +0000 (UTC)
	(envelope-from davidxu@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 588F88FC1E;
	Thu,  4 Nov 2010 06:11:39 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oA46BddB046025;
	Thu, 4 Nov 2010 06:11:39 GMT (envelope-from davidxu@svn.freebsd.org)
Received: (from davidxu@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id oA46BdAO046023;
	Thu, 4 Nov 2010 06:11:39 GMT (envelope-from davidxu@svn.freebsd.org)
Message-Id: <201011040611.oA46BdAO046023@svn.freebsd.org>
From: David Xu <davidxu@FreeBSD.org>
Date: Thu, 4 Nov 2010 06:11:39 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r214770 - user/davidxu/libthr/lib/libthr/thread
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 04 Nov 2010 06:11:39 -0000

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)