Date: Fri, 5 Nov 2010 06:39:38 +0000 (UTC) From: David Xu <davidxu@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r214824 - user/davidxu/libthr/lib/libthr/thread Message-ID: <201011050639.oA56dcYq087154@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: davidxu Date: Fri Nov 5 06:39:38 2010 New Revision: 214824 URL: http://svn.freebsd.org/changeset/base/214824 Log: Restore to previous version, don't use THR_UMTX_ACQUIRE, as it is not needed to inhibit signal and other async things. 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 Fri Nov 5 06:35:10 2010 (r214823) +++ user/davidxu/libthr/lib/libthr/thread/thr_cond.c Fri Nov 5 06:39:38 2010 (r214824) @@ -214,19 +214,19 @@ cond_wait_user(pthread_cond_t *cond, pth uint64_t seq, bseq; cv = *cond; - THR_UMTX_ACQUIRE(curthread, &cv->c_lock); + _thr_umtx_lock_spin(&cv->c_lock); cv->c_waiters++; ret = _mutex_cv_unlock(mutex, &recurse); if (__predict_false(ret != 0)) { cv->c_waiters--; - THR_UMTX_RELEASE(curthread, &cv->c_lock); + _thr_umtx_unlock(&cv->c_lock); return (ret); } bseq = cv->c_broadcast_seq; for(;;) { seq = cv->c_seq; - THR_UMTX_RELEASE(curthread, &cv->c_lock); + _thr_umtx_unlock(&cv->c_lock); if (abstime != NULL) { clock_gettime(cv->c_kerncv.c_clockid, &ts); @@ -245,7 +245,7 @@ cond_wait_user(pthread_cond_t *cond, pth (u_int)seq, tsp, 0); } - THR_UMTX_ACQUIRE(curthread, &cv->c_lock); + _thr_umtx_lock_spin(&cv->c_lock); if (cv->c_broadcast_seq != bseq) { ret = 0; break; @@ -258,11 +258,11 @@ cond_wait_user(pthread_cond_t *cond, pth break; } else if (cancel && SHOULD_CANCEL(curthread) && !THR_IN_CRITICAL(curthread)) { - THR_UMTX_RELEASE(curthread, &cv->c_lock); + _thr_umtx_unlock(&cv->c_lock); _pthread_exit(PTHREAD_CANCELED); } } - THR_UMTX_RELEASE(curthread, &cv->c_lock); + _thr_umtx_unlock(&cv->c_lock); _mutex_cv_lock(mutex, recurse); return (ret); } @@ -340,7 +340,6 @@ __pthread_cond_timedwait(pthread_cond_t static int cond_signal_common(pthread_cond_t *cond, int broadcast) { - struct pthread *curthread = _get_curthread(); pthread_cond_t cv; /* @@ -357,7 +356,7 @@ cond_signal_common(pthread_cond_t *cond, if (cv->c_waiters == 0) return (0); - THR_UMTX_ACQUIRE(curthread, &cv->c_lock); + _thr_umtx_lock_spin(&cv->c_lock); if (cv->c_waiters > 0) { if (!broadcast) { cv->c_seq++; @@ -372,7 +371,7 @@ cond_signal_common(pthread_cond_t *cond, _thr_umtx_wake(&cv->c_seq, INT_MAX, 0); } } - THR_UMTX_RELEASE(curthread, &cv->c_lock); + _thr_umtx_unlock(&cv->c_lock); return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011050639.oA56dcYq087154>