diff --git a/include/wsrep/client_state.hpp b/include/wsrep/client_state.hpp index c871c73..3c518d6 100644 --- a/include/wsrep/client_state.hpp +++ b/include/wsrep/client_state.hpp @@ -193,6 +193,13 @@ namespace wsrep * The state is changed to s_none. */ void cleanup(); + + /** + * Overload of cleanup() method which takes lock as argument. + * This method does not release the lock during execution, but + * the lock is needed for debug build sanity checks. + */ + void cleanup(wsrep::unique_lock& lock); /** @} */ /** @name Client command handling */ diff --git a/include/wsrep/condition_variable.hpp b/include/wsrep/condition_variable.hpp index b929147..25a0e16 100644 --- a/include/wsrep/condition_variable.hpp +++ b/include/wsrep/condition_variable.hpp @@ -74,7 +74,7 @@ namespace wsrep { if (pthread_cond_wait( &cond_, - reinterpret_cast(lock.mutex().native()))) + reinterpret_cast(lock.mutex()->native()))) { throw wsrep::runtime_error("Cond wait failed"); } diff --git a/include/wsrep/lock.hpp b/include/wsrep/lock.hpp index bc72b68..6537901 100644 --- a/include/wsrep/lock.hpp +++ b/include/wsrep/lock.hpp @@ -20,57 +20,12 @@ #ifndef WSREP_LOCK_HPP #define WSREP_LOCK_HPP -#include "mutex.hpp" - -#include +#include namespace wsrep { - template - class unique_lock - { - public: - unique_lock(M& mutex) - : mutex_(mutex) - , locked_(false) - { - mutex_.lock(); - locked_ = true; - } - ~unique_lock() - { - if (locked_) - { - unlock(); - } - } - - void lock() - { - mutex_.lock(); - assert(locked_ == false); - locked_ = true; - } - - void unlock() - { - assert(locked_); - locked_ = false; - mutex_.unlock(); - } - - bool owns_lock() const - { - return locked_; - } - - M& mutex() { return mutex_; } - private: - unique_lock(const unique_lock&); - unique_lock& operator=(const unique_lock&); - M& mutex_; - bool locked_; - }; + template + using unique_lock = std::unique_lock; } #endif // WSREP_LOCK_HPP diff --git a/src/client_state.cpp b/src/client_state.cpp index 5a405a9..d4fd101 100644 --- a/src/client_state.cpp +++ b/src/client_state.cpp @@ -69,6 +69,11 @@ void wsrep::client_state::close() void wsrep::client_state::cleanup() { wsrep::unique_lock lock(mutex_); + cleanup(lock); +} + +void wsrep::client_state::cleanup(wsrep::unique_lock& lock) +{ debug_log_state("cleanup: enter"); state(lock, s_none); debug_log_state("cleanup: leave"); diff --git a/src/thread_service_v1.cpp b/src/thread_service_v1.cpp index 0de516a..1d07af2 100644 --- a/src/thread_service_v1.cpp +++ b/src/thread_service_v1.cpp @@ -23,6 +23,7 @@ #include "wsrep/logger.hpp" #include "v26/wsrep_thread_service.h" +#include #include #include