svn commit: r215073 - user/davidxu/libthr/lib/libthr/thread
David Xu
davidxu at FreeBSD.org
Wed Nov 10 01:52:10 UTC 2010
Author: davidxu
Date: Wed Nov 10 01:52:10 2010
New Revision: 215073
URL: http://svn.freebsd.org/changeset/base/215073
Log:
Remove debug code. Use same condition variable destroying code for
FBSD_1.1 interface.
Modified:
user/davidxu/libthr/lib/libthr/thread/thr_cond.c
user/davidxu/libthr/lib/libthr/thread/thr_mutex.c
Modified: user/davidxu/libthr/lib/libthr/thread/thr_cond.c
==============================================================================
--- user/davidxu/libthr/lib/libthr/thread/thr_cond.c Wed Nov 10 01:29:56 2010 (r215072)
+++ user/davidxu/libthr/lib/libthr/thread/thr_cond.c Wed Nov 10 01:52:10 2010 (r215073)
@@ -97,23 +97,20 @@ _pthread_cond_init(pthread_cond_t *cond,
return (cond_init(cond, cond_attr));
}
-int
-_pthread_cond_destroy(pthread_cond_t *cvp)
+static int
+cond_destroy_common(pthread_cond_t *cvp)
{
int error = 0;
if (cvp->__refcount == 0)
goto next;
_thr_umtx_lock_spin(&cvp->__lock);
+ if (cvp->__waiters > 0) {
+ _thr_umtx_unlock(&cvp->__lock);
+ return (EBUSY);
+ }
while (cvp->__refcount != 0) {
cvp->__destroying = 1;
- if (cvp->__waiters > 0) {
- cvp->__seq++;
- cvp->__broadcast_seq++;
- cvp->__waiters = 0;
- cvp->__signals = 0;
- _thr_umtx_wake(&cvp->__seq, INT_MAX, CV_PSHARED(cvp));
- }
_thr_umtx_unlock(&cvp->__lock);
_thr_umtx_wait_uint((u_int *)&cvp->__destroying,
1, NULL, CV_PSHARED(cvp));
@@ -125,6 +122,12 @@ next:
return (error);
}
+int
+_pthread_cond_destroy(pthread_cond_t *cvp)
+{
+ return cond_destroy_common(cvp);
+}
+
/*
* Cancellation behaivor:
* Thread may be canceled at start, if thread is canceled, it means it
@@ -282,7 +285,7 @@ cond_wait_common(struct pthread_cond *cv
* Note that if it is robust type of mutex, we should not use
* the internal lock too, because it is not robust.
*/
- if (1 || curthread->attr.sched_policy != SCHED_OTHER ||
+ if (curthread->attr.sched_policy != SCHED_OTHER ||
curthread->priority_mutex_count != 0 ||
(mp->__lockflags & (UMUTEX_PRIO_PROTECT|UMUTEX_PRIO_INHERIT|
UMUTEX_ROBUST)) != 0)
@@ -451,13 +454,10 @@ _pthread_cond_destroy_1_0(pthread_cond_o
error = EINVAL;
else {
cvp = *cond;
- /* XXX */
+ error = cond_destroy_common(cvp);
+ if (error)
+ return (error);
*cond = THR_COND_DESTROYED;
-
- /*
- * Free the memory allocated for the condition
- * variable structure:
- */
free(cvp);
}
return (error);
Modified: user/davidxu/libthr/lib/libthr/thread/thr_mutex.c
==============================================================================
--- user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Wed Nov 10 01:29:56 2010 (r215072)
+++ user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Wed Nov 10 01:52:10 2010 (r215073)
@@ -1101,12 +1101,9 @@ _pthread_mutex_init_calloc_cb(pthread_mu
.m_robust = PTHREAD_MUTEX_STALLED
};
int error;
- _thread_printf(2, "%s mp=%p\n", __func__, mp);
error = mutex_init(mp, &attr);
- if (error == 0) {
+ if (error == 0)
mp->__flags |= PMUTEX_FLAG_PRIVATE;
- }
- _thread_printf(2, "%s init erro=%dr\n", __func__, error);
return (error);
}
More information about the svn-src-user
mailing list