svn commit: r214833 - user/davidxu/libthr/lib/libthr/thread
David Xu
davidxu at FreeBSD.org
Fri Nov 5 09:32:32 UTC 2010
Author: davidxu
Date: Fri Nov 5 09:32:32 2010
New Revision: 214833
URL: http://svn.freebsd.org/changeset/base/214833
Log:
Pass process-shared flag to syscall.
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 09:10:16 2010 (r214832)
+++ user/davidxu/libthr/lib/libthr/thread/thr_cond.c Fri Nov 5 09:32:32 2010 (r214833)
@@ -60,6 +60,8 @@ __weak_reference(_pthread_cond_destroy,
__weak_reference(_pthread_cond_signal, pthread_cond_signal);
__weak_reference(_pthread_cond_broadcast, pthread_cond_broadcast);
+#define CV_PSHARED(cv) (((cv)->c_kerncv.c_flags & USYNC_PROCESS_SHARED) != 0)
+
static int
cond_init(pthread_cond_t *cond, const pthread_condattr_t *cond_attr)
{
@@ -238,11 +240,11 @@ cond_wait_user(pthread_cond_t *cond, pth
if (cancel) {
_thr_cancel_enter2(curthread, 0);
ret = _thr_umtx_wait_uint((u_int *)&cv->c_seq,
- (u_int)seq, tsp, 0);
+ (u_int)seq, tsp, CV_PSHARED(cv));
_thr_cancel_leave(curthread, 0);
} else {
ret = _thr_umtx_wait_uint((u_int *)&cv->c_seq,
- (u_int)seq, tsp, 0);
+ (u_int)seq, tsp, CV_PSHARED(cv));
}
_thr_umtx_lock_spin(&cv->c_lock);
@@ -371,13 +373,13 @@ cond_signal_common(pthread_cond_t *cond,
cv->c_seq++;
cv->c_signaled++;
cv->c_waiters--;
- _thr_umtx_wake(&cv->c_seq, 1, 0);
+ _thr_umtx_wake(&cv->c_seq, 1, CV_PSHARED(cv));
} else {
cv->c_seq++;
cv->c_broadcast_seq++;
cv->c_waiters = 0;
cv->c_signaled = 0;
- _thr_umtx_wake(&cv->c_seq, INT_MAX, 0);
+ _thr_umtx_wake(&cv->c_seq, INT_MAX, CV_PSHARED(cv));
}
}
_thr_umtx_unlock(&cv->c_lock);
More information about the svn-src-user
mailing list