#ifndef threading_LockGuard_h
#define threading_LockGuard_h
namespace js {
template <typename Mutex>
class MOZ_RAII UnlockGuard;
template <typename Mutex>
class MOZ_RAII LockGuard {
friend class UnlockGuard<Mutex>;
friend class ConditionVariable;
Mutex& lock;
public:
explicit LockGuard(Mutex& aLock) : lock(aLock) { lock.lock(); }
~LockGuard() { lock.unlock(); }
};
template <typename Mutex>
class MOZ_RAII UnlockGuard {
Mutex& lock;
public:
explicit UnlockGuard(LockGuard<Mutex>& aGuard) : lock(aGuard.lock) {
lock.unlock();
}
~UnlockGuard() { lock.lock(); }
};
}
#endif