svn commit: r214969 - in user/davidxu/libthr: include
lib/libc/include lib/libthr lib/libthr/thread
David Xu
davidxu at FreeBSD.org
Mon Nov 8 02:19:53 UTC 2010
Author: davidxu
Date: Mon Nov 8 02:19:53 2010
New Revision: 214969
URL: http://svn.freebsd.org/changeset/base/214969
Log:
Add POSIX function pthread_mutex_consistent which resets state of robust mutex.
Modified:
user/davidxu/libthr/include/pthread.h
user/davidxu/libthr/lib/libc/include/namespace.h
user/davidxu/libthr/lib/libc/include/un-namespace.h
user/davidxu/libthr/lib/libthr/pthread.map
user/davidxu/libthr/lib/libthr/thread/thr_mutex.c
Modified: user/davidxu/libthr/include/pthread.h
==============================================================================
--- user/davidxu/libthr/include/pthread.h Mon Nov 8 01:15:42 2010 (r214968)
+++ user/davidxu/libthr/include/pthread.h Mon Nov 8 02:19:53 2010 (r214969)
@@ -228,6 +228,7 @@ int pthread_mutexattr_settype(pthread_m
int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
int pthread_mutexattr_setrobust(pthread_mutexattr_t *,
int);
+int pthread_mutex_consistent(pthread_mutex_t *);
int pthread_mutex_destroy(pthread_mutex_t *);
int pthread_mutex_init(pthread_mutex_t *,
const pthread_mutexattr_t *);
Modified: user/davidxu/libthr/lib/libc/include/namespace.h
==============================================================================
--- user/davidxu/libthr/lib/libc/include/namespace.h Mon Nov 8 01:15:42 2010 (r214968)
+++ user/davidxu/libthr/lib/libc/include/namespace.h Mon Nov 8 02:19:53 2010 (r214969)
@@ -143,6 +143,7 @@
#define pthread_kill _pthread_kill
#define pthread_main_np _pthread_main_np
#define pthread_multi_np _pthread_multi_np
+#define pthread_mutex_consistent _pthread_mutex_consistent
#define pthread_mutex_destroy _pthread_mutex_destroy
#define pthread_mutex_getprioceiling _pthread_mutex_getprioceiling
#define pthread_mutex_init _pthread_mutex_init
Modified: user/davidxu/libthr/lib/libc/include/un-namespace.h
==============================================================================
--- user/davidxu/libthr/lib/libc/include/un-namespace.h Mon Nov 8 01:15:42 2010 (r214968)
+++ user/davidxu/libthr/lib/libc/include/un-namespace.h Mon Nov 8 02:19:53 2010 (r214969)
@@ -124,6 +124,7 @@
#undef pthread_kill
#undef pthread_main_np
#undef pthread_multi_np
+#undef pthread_mutex_consistent
#undef pthread_mutex_destroy
#undef pthread_mutex_getprioceiling
#undef pthread_mutex_init
Modified: user/davidxu/libthr/lib/libthr/pthread.map
==============================================================================
--- user/davidxu/libthr/lib/libthr/pthread.map Mon Nov 8 01:15:42 2010 (r214968)
+++ user/davidxu/libthr/lib/libthr/pthread.map Mon Nov 8 02:19:53 2010 (r214969)
@@ -278,6 +278,7 @@ FBSDprivate_1.0 {
_pthread_kill;
_pthread_main_np;
_pthread_multi_np;
+ _pthread_mutex_consistent;
_pthread_mutex_destroy;
_pthread_mutex_getprioceiling;
_pthread_mutex_getspinloops_np;
@@ -407,4 +408,5 @@ FBSD_1.2 {
swapcontext;
pthread_mutexattr_getrobust;
pthread_mutexattr_setrobust;
+ pthread_mutex_consistent;
};
Modified: user/davidxu/libthr/lib/libthr/thread/thr_mutex.c
==============================================================================
--- user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Mon Nov 8 01:15:42 2010 (r214968)
+++ user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Mon Nov 8 02:19:53 2010 (r214969)
@@ -115,6 +115,7 @@ __weak_reference(__pthread_mutex_setyiel
__strong_reference(__pthread_mutex_setyieldloops_np, _pthread_mutex_setyieldloops_np);
__weak_reference(_pthread_mutex_getyieldloops_np, pthread_mutex_getyieldloops_np);
__weak_reference(_pthread_mutex_isowned_np, pthread_mutex_isowned_np);
+__weak_reference(_pthread_mutex_consistent, pthread_mutex_consistent);
static int
mutex_init(pthread_mutex_t *mutex,
@@ -857,6 +858,21 @@ _pthread_mutex_isowned_np(pthread_mutex_
return (_mutex_owned(_get_curthread(), mutex) == 0);
}
+int
+_pthread_mutex_consistent(pthread_mutex_t *mutex)
+{
+
+ if (_mutex_owned(_get_curthread(), mutex) == 0) {
+ struct pthread_mutex *m = *mutex;
+ if (m->m_lock.m_flags & UMUTEX_ROBUST) {
+ m->m_lock.m_robstate = UMUTEX_ROBST_NORMAL;
+ m->m_recurse = 0;
+ return (0);
+ }
+ }
+ return (EINVAL);
+}
+
void
_thr_mutex_link_init(struct pthread *td)
{
More information about the svn-src-user
mailing list