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>