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