Commit 52d245f1 authored by Michal 'vorner' Vaner's avatar Michal 'vorner' Vaner
Browse files

[2202] Drop support for recursive mutexes

They are not needed currently.
parent 8bd4cd42
......@@ -56,7 +56,7 @@ struct Deinitializer {
Mutex::Mutex(bool recursive) :
Mutex::Mutex() :
pthread_mutexattr_t attributes;
......@@ -72,11 +72,7 @@ Mutex::Mutex(bool recursive) :
Deinitializer deinitializer(attributes);
// TODO: Distinguish if debug mode is enabled in compilation.
// If so, it should be PTHREAD_MUTEX_NORMAL or NULL
if (recursive) {
result = pthread_mutexattr_settype(&attributes, type);
result = pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_ERRORCHECK);
if (result != 0) {
isc_throw(isc::InvalidOperation, strerror(result));
......@@ -44,23 +44,18 @@ class Mutex : public boost::noncopyable {
/// \brief Constructor.
/// Creates a mutex. Depending on the parameter, it is either recursive
/// (the same thread may lock it multiple times, others wait; it must be
/// unlocked as many times to become really unlocked) or normal (can be
/// locked just once, if the same threads tries to lock it again, Bad
/// Things Happen).
/// Creates a mutex. It is a non-recursive mutex (can be locked just once,
/// if the same threads tries to lock it again, Bad Things Happen).
/// Depending on compilation parameters and OS, the mutex may or may not
/// do some error and sanity checking. However, such checking is meant
/// only to aid development, not rely on it as a feature.
/// \param recursive If the thread should be recursive (lockable multiple
/// times from the same thread) or not.
/// \throw std::bad_alloc In case allocation of something (memory, the
/// OS mutex) fails.
/// \throw isc::InvalidOperation Other unspecified errors around the mutex.
/// This should be rare.
Mutex(bool recursive = false);
/// \brief Destructor.
......@@ -86,8 +81,7 @@ public:
/// \throw isc::InvalidOperation when OS reports error. This usually
/// means an attempt to use the mutex in a wrong way (locking
/// a non-recursive mutex a second time from the same thread,
/// for example).
/// a mutex second time from the same thread, for example).
Locker(Mutex& mutex) :
......@@ -25,18 +25,6 @@ using namespace isc::util::thread;
namespace {
// Test a recursive mutex can be locked multiple times
TEST(MutexTest, recursiveLockMultiple) {
Mutex mutex(true);
EXPECT_FALSE(mutex.locked()); // Debug-only build
Mutex::Locker l1(mutex);
EXPECT_TRUE(mutex.locked()); // Debug-only build
Mutex::Locker l2(mutex);
Mutex::Locker l3(mutex);
Mutex::Locker l4(mutex);
Mutex::Locker l5(mutex);
// If we try to lock the debug mutex multiple times, it should throw.
TEST(MutexTest, lockMultiple) {
// TODO: Once we support non-debug mutexes, disable the test if we compile
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment