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 12 namespace 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 19 class AutoLock { 20 public: 21 AutoLock(const SimpleLock& lock) { 22 lock_ = lock.mutex(); 23 pthread_mutex_lock(lock_); 24 } 25 26 ~AutoLock() { 27 if (lock_) pthread_mutex_unlock(lock_); 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