Date: Mon, 8 Nov 2010 02:19:53 +0000 (UTC) From: David Xu <davidxu@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r214969 - in user/davidxu/libthr: include lib/libc/include lib/libthr lib/libthr/thread Message-ID: <201011080219.oA82JrPM002484@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011080219.oA82JrPM002484>