svn commit: r214772 - in user/davidxu/libthr: lib/libthr/thread
sys/kern sys/sys
David Xu
davidxu at FreeBSD.org
Thu Nov 4 06:51:54 UTC 2010
Author: davidxu
Date: Thu Nov 4 06:51:53 2010
New Revision: 214772
URL: http://svn.freebsd.org/changeset/base/214772
Log:
Define UCOND_BIND_MUTEX flag to bind a umutex to a ucond, it indicates
a protocol if the condition variable is shared among processes.
the system call argument CVWAIT_BIND_MUTEX is removed.
Modified:
user/davidxu/libthr/lib/libthr/thread/thr_barrier.c
user/davidxu/libthr/lib/libthr/thread/thr_cond.c
user/davidxu/libthr/sys/kern/kern_umtx.c
user/davidxu/libthr/sys/sys/umtx.h
Modified: user/davidxu/libthr/lib/libthr/thread/thr_barrier.c
==============================================================================
--- user/davidxu/libthr/lib/libthr/thread/thr_barrier.c Thu Nov 4 06:37:15 2010 (r214771)
+++ user/davidxu/libthr/lib/libthr/thread/thr_barrier.c Thu Nov 4 06:51:53 2010 (r214772)
@@ -102,7 +102,7 @@ _pthread_barrier_wait(pthread_barrier_t
} else {
cycle = bar->b_cycle;
do {
- _thr_ucond_wait(&bar->b_cv, &bar->b_lock, NULL, CVWAIT_BIND_MUTEX);
+ _thr_ucond_wait(&bar->b_cv, &bar->b_lock, NULL, 0);
THR_UMUTEX_LOCK(curthread, &bar->b_lock);
/* test cycle to avoid bogus wakeup */
} while (cycle == bar->b_cycle);
Modified: user/davidxu/libthr/lib/libthr/thread/thr_cond.c
==============================================================================
--- user/davidxu/libthr/lib/libthr/thread/thr_cond.c Thu Nov 4 06:37:15 2010 (r214771)
+++ user/davidxu/libthr/lib/libthr/thread/thr_cond.c Thu Nov 4 06:51:53 2010 (r214772)
@@ -80,6 +80,7 @@ cond_init(pthread_cond_t *cond, const pt
pcond->c_pshared = (*cond_attr)->c_pshared;
pcond->c_clockid = (*cond_attr)->c_clockid;
}
+ pcond->c_kerncv.c_flags |= UCOND_BIND_MUTEX;
*cond = pcond;
}
/* Return the completion status: */
@@ -188,10 +189,10 @@ cond_wait_common(pthread_cond_t *cond, p
if (cancel) {
_thr_cancel_enter2(curthread, 0);
- ret = _thr_ucond_wait(&cv->c_kerncv, &m->m_lock, tsp, CVWAIT_BIND_MUTEX);
+ ret = _thr_ucond_wait(&cv->c_kerncv, &m->m_lock, tsp, 0);
_thr_cancel_leave(curthread, 0);
} else {
- ret = _thr_ucond_wait(&cv->c_kerncv, &m->m_lock, tsp, CVWAIT_BIND_MUTEX);
+ ret = _thr_ucond_wait(&cv->c_kerncv, &m->m_lock, tsp, 0);
}
if (ret == 0) {
Modified: user/davidxu/libthr/sys/kern/kern_umtx.c
==============================================================================
--- user/davidxu/libthr/sys/kern/kern_umtx.c Thu Nov 4 06:37:15 2010 (r214771)
+++ user/davidxu/libthr/sys/kern/kern_umtx.c Thu Nov 4 06:51:53 2010 (r214772)
@@ -2495,9 +2495,9 @@ do_cv_wait(struct thread *td, struct uco
if (error != 0)
return (error);
savekey = uq->uq_key;
- if ((wflags & CVWAIT_BIND_MUTEX) != 0) {
+ if ((flags & UCOND_BIND_MUTEX) != 0) {
if ((mflags & UMUTEX_PRIO_INHERIT) != 0)
- return (EINVAL);
+ goto ignore;
error = umtx_key_get(m, TYPE_NORMAL_UMUTEX,
GET_SHARE(mflags), &mkey);
if (error != 0) {
@@ -2510,6 +2510,7 @@ do_cv_wait(struct thread *td, struct uco
bind_mutex = NULL;
mkeyp = &mkey;
} else {
+ignore:
bind_mutex = NULL;
mkeyp = NULL;
}
Modified: user/davidxu/libthr/sys/sys/umtx.h
==============================================================================
--- user/davidxu/libthr/sys/sys/umtx.h Thu Nov 4 06:37:15 2010 (r214771)
+++ user/davidxu/libthr/sys/sys/umtx.h Thu Nov 4 06:51:53 2010 (r214772)
@@ -54,6 +54,8 @@
#define URWLOCK_MAX_READERS 0x1fffffffU
#define URWLOCK_READER_COUNT(c) ((c) & URWLOCK_MAX_READERS)
+#define UCOND_BIND_MUTEX 0x0002
+
/* _usem flags */
#define SEM_NAMED 0x0002
@@ -83,7 +85,6 @@
/* flags for UMTX_OP_CV_WAIT */
#define CVWAIT_CHECK_UNPARKING 0x01
-#define CVWAIT_BIND_MUTEX 0x02
#define UMTX_CHECK_UNPARKING _CVWAIT_CHECK_UNPARKING
#ifndef _KERNEL
More information about the svn-src-user
mailing list