1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef LIBRARIES_SDK_UTIL_AUTO_LOCK_H_ 6#define LIBRARIES_SDK_UTIL_AUTO_LOCK_H_ 7 8#include <pthread.h> 9#include "sdk_util/macros.h" 10#include "sdk_util/simple_lock.h" 11 12namespace sdk_util { 13 14// This macro is provided to allow us to quickly instrument locking for 15// debugging purposes. 16#define AUTO_LOCK(lock) \ 17 ::sdk_util::AutoLock Lock##__LINE__(lock); 18 19class AutoLock { 20 public: 21 AutoLock(const SimpleLock& lock) { 22 lock_ = lock.mutex(); 23 pthread_mutex_lock(lock_); 24 } 25 26 ~AutoLock() { 27 Unlock(); 28 } 29 30 void Unlock() { 31 if (lock_) pthread_mutex_unlock(lock_); 32 lock_ = NULL; 33 } 34 35 private: 36 pthread_mutex_t* lock_; 37 38 DISALLOW_COPY_AND_ASSIGN(AutoLock); 39}; 40 41} // namespace sdk_util 42 43#endif // LIBRARIES_SDK_UTIL_AUTO_LOCK_H_ 44