From owner-svn-src-user@FreeBSD.ORG Mon Nov 8 02:19:53 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BC472106566B; Mon, 8 Nov 2010 02:19:53 +0000 (UTC) (envelope-from davidxu@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 729E18FC1C; Mon, 8 Nov 2010 02:19:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oA82Jrt3002490; Mon, 8 Nov 2010 02:19:53 GMT (envelope-from davidxu@svn.freebsd.org) Received: (from davidxu@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oA82JrPM002484; Mon, 8 Nov 2010 02:19:53 GMT (envelope-from davidxu@svn.freebsd.org) Message-Id: <201011080219.oA82JrPM002484@svn.freebsd.org> From: David Xu Date: Mon, 8 Nov 2010 02:19:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r214969 - in user/davidxu/libthr: include lib/libc/include lib/libthr lib/libthr/thread X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Nov 2010 02:19:53 -0000 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) {