From 82d26ea7563712ac0b7f1c626dd878e33e35c4b6 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 9 Nov 2012 14:13:03 -0800 Subject: [PATCH] Add a scoped unlock class. --- src/cpp/ripple/ScopedLock.h | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/ScopedLock.h b/src/cpp/ripple/ScopedLock.h index 1fd1ee6082..5f85b83ed3 100644 --- a/src/cpp/ripple/ScopedLock.h +++ b/src/cpp/ripple/ScopedLock.h @@ -16,16 +16,26 @@ protected: public: ScopedLock(boost::recursive_mutex& mutex) : - mHolder(boost::make_shared(boost::ref(mutex))) - { ; } - void lock() const - { - mHolder->lock(); - } - void unlock() const - { - mHolder->unlock(); - } + mHolder(boost::make_shared(boost::ref(mutex))) { ; } + + void lock() const { mHolder->lock(); } + void unlock() const { mHolder->unlock(); } +}; + +// A class that unlocks on construction and locks on destruction + +class ScopedUnlock +{ +protected: + boost::recursive_mutex& mMutex; + +public: + ScopedUnlock(boost::recursive_mutex& mutex) : mMutex(mutex) { mMutex.unlock(); } + ~ScopedUnlock() { mMutex.lock(); } + +private: + ScopedUnlock(const ScopedUnlock&); // no implementation + ScopedUnlock& operator=(const ScopedUnlock&); // no implementation }; #endif