svn commit: r279284 - head/lib/libthr/thread
Konstantin Belousov
kib at FreeBSD.org
Wed Feb 25 16:18:27 UTC 2015
Author: kib
Date: Wed Feb 25 16:18:26 2015
New Revision: 279284
URL: https://svnweb.freebsd.org/changeset/base/279284
Log:
Propagate errors from _thr_umutex_unlock2 through mutex_unlock_common.
Errors from _thr_umutex_unlock2 should "never happen" in normal
circumstances. If they do, however, return them to the application
so it can fail early and loudly. Hiding the errors will only delay
the inevitable failure, making it harder to find and diagnose.
Submitted by: Eric van Gyzen <eric_van_gyzen at dell.com>
Obtained from: Dell Inc.
PR: 198914
MFC after: 1 week
Modified:
head/lib/libthr/thread/thr_mutex.c
Modified: head/lib/libthr/thread/thr_mutex.c
==============================================================================
--- head/lib/libthr/thread/thr_mutex.c Wed Feb 25 16:17:16 2015 (r279283)
+++ head/lib/libthr/thread/thr_mutex.c Wed Feb 25 16:18:26 2015 (r279284)
@@ -633,7 +633,7 @@ mutex_unlock_common(struct pthread_mutex
{
struct pthread *curthread = _get_curthread();
uint32_t id;
- int defered;
+ int defered, error;
if (__predict_false(m <= THR_MUTEX_DESTROYED)) {
if (m == THR_MUTEX_DESTROYED)
@@ -647,6 +647,7 @@ mutex_unlock_common(struct pthread_mutex
if (__predict_false(m->m_owner != curthread))
return (EPERM);
+ error = 0;
id = TID(curthread);
if (__predict_false(
PMUTEX_TYPE(m->m_flags) == PTHREAD_MUTEX_RECURSIVE &&
@@ -660,7 +661,7 @@ mutex_unlock_common(struct pthread_mutex
defered = 0;
DEQUEUE_MUTEX(curthread, m);
- _thr_umutex_unlock2(&m->m_lock, id, mtx_defer);
+ error = _thr_umutex_unlock2(&m->m_lock, id, mtx_defer);
if (mtx_defer == NULL && defered) {
_thr_wake_all(curthread->defer_waiters,
@@ -670,7 +671,7 @@ mutex_unlock_common(struct pthread_mutex
}
if (!cv && m->m_flags & PMUTEX_FLAG_PRIVATE)
THR_CRITICAL_LEAVE(curthread);
- return (0);
+ return (error);
}
int
More information about the svn-src-head
mailing list