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