Date: Fri, 5 Nov 2010 07:04:32 +0000 (UTC) From: David Xu <davidxu@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r214827 - user/davidxu/libthr/lib/libthr/thread Message-ID: <201011050704.oA574WE6087863@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: davidxu Date: Fri Nov 5 07:04:32 2010 New Revision: 214827 URL: http://svn.freebsd.org/changeset/base/214827 Log: Account priority mutex we have locked, in cv_wait we use kernel based cv if the thread helds priority mutex. Modified: user/davidxu/libthr/lib/libthr/thread/thr_mutex.c user/davidxu/libthr/lib/libthr/thread/thr_private.h Modified: user/davidxu/libthr/lib/libthr/thread/thr_mutex.c ============================================================================== --- user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Fri Nov 5 07:03:35 2010 (r214826) +++ user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Fri Nov 5 07:04:32 2010 (r214827) @@ -865,6 +865,11 @@ enqueue_mutex(struct pthread *curthread, TAILQ_INSERT_TAIL(&curthread->pi_mutexq, ml, qe); } } + if ((m->m_lock.m_flags & + (UMUTEX_PRIO_PROTECT|UMUTEX_PRIO_PROTECT)) != 0) { + curthread->priority_mutex_count++; + _thread_printf(2, "priority mutex ++\n"); + } } static void @@ -881,7 +886,7 @@ dequeue_mutex(struct pthread *curthread, TAILQ_REMOVE(&curthread->pp_mutexq, ml, qe); set_inherited_priority(curthread, m); _thr_mutex_link_free(ml); - break; + goto out; } } } else if ((m->m_lock.m_flags & (UMUTEX_PRIO_INHERIT | @@ -890,8 +895,16 @@ dequeue_mutex(struct pthread *curthread, if (ml->mutexp == m) { TAILQ_REMOVE(&curthread->pi_mutexq, ml, qe); _thr_mutex_link_free(ml); - break; + goto out; } } } + return; + +out: + if ((m->m_lock.m_flags & + (UMUTEX_PRIO_PROTECT|UMUTEX_PRIO_PROTECT)) != 0) { + _thread_printf(2, "priority mutex --\n"); + curthread->priority_mutex_count--; + } } Modified: user/davidxu/libthr/lib/libthr/thread/thr_private.h ============================================================================== --- user/davidxu/libthr/lib/libthr/thread/thr_private.h Fri Nov 5 07:03:35 2010 (r214826) +++ user/davidxu/libthr/lib/libthr/thread/thr_private.h Fri Nov 5 07:04:32 2010 (r214827) @@ -440,7 +440,7 @@ struct pthread { #define TLFLAGS_IN_TDLIST 0x0002 /* thread in all thread list */ #define TLFLAGS_IN_GCLIST 0x0004 /* thread in gc list */ - /* Queue of currently owned NORMAL or PRIO_INHERIT type mutexes. */ + /* Queue of currently owned PRIO_INHERIT type mutexes. */ struct mutex_link_list pi_mutexq; /* Queue of all owned PRIO_PROTECT mutexes. */ @@ -453,6 +453,9 @@ struct pthread { struct pthread_specific_elem *specific; int specific_data_count; + /* Number of priority mutex held. */ + int priority_mutex_count; + /* Number rwlocks rdlocks held. */ int rdlock_count;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011050704.oA574WE6087863>