From: Yehuda Sadeh Date: Sat, 3 May 2014 15:33:22 +0000 (-0700) Subject: common/RWLock: add explicit unlock() to *Lockers X-Git-Tag: v0.86~213^2~110 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=91c938f57c450a5a8fe388668cb31a40c6f985c2;p=ceph.git common/RWLock: add explicit unlock() to *Lockers Signed-off-by: Yehuda Sadeh --- diff --git a/src/common/RWLock.h b/src/common/RWLock.h index eb2faaaf7c0b..6f3ffe315b6d 100644 --- a/src/common/RWLock.h +++ b/src/common/RWLock.h @@ -114,24 +114,46 @@ public: class RLocker { const RWLock &m_lock; + bool locked; + public: RLocker(const RWLock& lock) : m_lock(lock) { m_lock.get_read(); + locked = true; + } + void unlock() { + assert(locked); + m_lock.unlock(); + locked = false; } ~RLocker() { - m_lock.put_read(); + if (locked) { + m_lock.unlock(); + } } }; class WLocker { RWLock &m_lock; + bool locked; + public: WLocker(RWLock& lock) : m_lock(lock) { m_lock.get_write(); + locked = true; + } + void unlock() { + assert(locked); + m_lock.unlock(); + locked = false; } ~WLocker() { - m_lock.put_write(); + if (locked) { + m_lock.unlock(); + } + } + }; } }; };