svn commit: r214770 - user/davidxu/libthr/lib/libthr/thread
David Xu
davidxu at FreeBSD.org
Thu Nov 4 06:11:39 UTC 2010
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)
More information about the svn-src-user
mailing list