svn commit: r214824 - user/davidxu/libthr/lib/libthr/thread
David Xu
davidxu at FreeBSD.org
Fri Nov 5 06:39:38 UTC 2010
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);
}
More information about the svn-src-user
mailing list