From ecd63370f60eab278c5e53f48e26bf829a942837 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 30 Dec 2011 23:16:07 -0800 Subject: [PATCH] Updates. --- ScopedLock.h | 84 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 33 deletions(-) diff --git a/ScopedLock.h b/ScopedLock.h index 6778b7cf15..027cabce11 100644 --- a/ScopedLock.h +++ b/ScopedLock.h @@ -9,44 +9,62 @@ class ScopedLock { private: - boost::recursive_mutex *mMutex; // parent object has greater scope, so guaranteed valid - mutable bool mValid; + boost::recursive_mutex *mMutex; // parent object has greater scope, so guaranteed valid + mutable bool mValid; + + ScopedLock(); // no implementation - ScopedLock(); // no implementation - public: - ScopedLock(boost::recursive_mutex &mutex) : mMutex(&mutex), mValid(true) - { - mMutex->lock(); - } + ScopedLock(boost::recursive_mutex &mutex) : mMutex(&mutex), mValid(true) + { + mMutex->lock(); + } - ~ScopedLock() - { - if(mValid) mMutex->unlock(); - } + ~ScopedLock() + { + if(mValid) mMutex->unlock(); + } - ScopedLock(const ScopedLock &sl) - { - mMutex=sl.mMutex; - if(sl.mValid) - { - mValid=true; - sl.mValid=false; - } - else mValid=false; - } + ScopedLock(const ScopedLock &sl) + { + mMutex=sl.mMutex; + if(sl.mValid) + { + mValid=true; + sl.mValid=false; + } + else mValid=false; + } - ScopedLock &operator=(const ScopedLock &sl) - { // we inherit any lock the other class member had - if(mValid) mMutex->unlock(); - mMutex=sl.mMutex; - if(sl.mValid) - { - mValid=true; - sl.mValid=false; - } - return *this; - } + ScopedLock &operator=(const ScopedLock &sl) + { // we inherit any lock the other class member had + if(mMutex!=sl.mMutex) + { + if(mValid) mMutex->unlock(); + mMutex=sl.mMutex; + mMutex->lock(); + mValid=true; + } + return *this; + } + + void unlock(void) + { + if(mValid) + { + mMutex->unlock(); + mValid=false; + } + } + + void lock(void) + { + if(mValid) + { + mMutex->lock(); + mValid=true; + } + } }; #endif