diff options
| author | David Xu <davidxu@FreeBSD.org> | 2007-10-31 01:50:48 +0000 |
|---|---|---|
| committer | David Xu <davidxu@FreeBSD.org> | 2007-10-31 01:50:48 +0000 |
| commit | 56b45d9067e22d0ac0e971dc3af57097c60bc04c (patch) | |
| tree | da4457a1ca209349389b1f4f2ad668831bc619da /lib | |
| parent | 55f18e070f684a9775e78ad8e5d92e1169b61e91 (diff) | |
Notes
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libthr/thread/thr_mutex.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/libthr/thread/thr_mutex.c b/lib/libthr/thread/thr_mutex.c index b54d70e4f263..a1f273421e93 100644 --- a/lib/libthr/thread/thr_mutex.c +++ b/lib/libthr/thread/thr_mutex.c @@ -366,6 +366,9 @@ mutex_lock_common(struct pthread *curthread, pthread_mutex_t *mutex, * the lock is likely to be released quickly and it is * faster than entering the kernel */ + if (m->m_lock.m_flags & UMUTEX_PRIO_PROTECT) + goto sleep_in_kernel; + if (!_thr_is_smp) goto yield_loop; @@ -381,8 +384,7 @@ mutex_lock_common(struct pthread *curthread, pthread_mutex_t *mutex, if (ret == 0) goto done; } else { - if (_thr_spinloops != 0 && - !(m->m_lock.m_flags & UMUTEX_PRIO_PROTECT)) { + if (_thr_spinloops != 0) { count = _thr_spinloops; while (count) { if (m->m_lock.m_owner == UMUTEX_UNOWNED) { @@ -407,6 +409,7 @@ yield_loop: } } +sleep_in_kernel: if (abstime == NULL) { ret = __thr_umutex_lock(&m->m_lock); } else if (__predict_false( |
