From 7c7f38b0092ba3bf1a4866c168807c737bd79a61 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Sat, 14 Dec 2013 12:58:38 +0000 Subject: [PATCH] Add better error checks in mutex support, see https://svn.boost.org/trac/boost/ticket/8903 --- src/static_mutex.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/static_mutex.cpp b/src/static_mutex.cpp index d14feb1e..2f4a2bde 100644 --- a/src/static_mutex.cpp +++ b/src/static_mutex.cpp @@ -18,6 +18,7 @@ #define BOOST_REGEX_SOURCE #include +#include #ifdef BOOST_HAS_THREADS @@ -54,8 +55,8 @@ void scoped_static_mutex_lock::lock() { if(0 == m_have_lock) { - pthread_mutex_lock(&(m_mutex.m_mutex)); - m_have_lock = true; + // Client code will throw if this fails: + m_have_lock = (pthread_mutex_lock(&(m_mutex.m_mutex)) == 0); } } @@ -63,7 +64,10 @@ void scoped_static_mutex_lock::unlock() { if(m_have_lock) { - pthread_mutex_unlock(&(m_mutex.m_mutex)); + // If this fails there's nothing we can do except assert, + // exceptions are out of the question as this code is called + // from the lock's destructor: + BOOST_VERIFY(pthread_mutex_unlock(&(m_mutex.m_mutex)) == 0); m_have_lock = false; } }