• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
AutoLock(const SimpleLock & lock)21   AutoLock(const SimpleLock& lock) {
22     lock_ = lock.mutex();
23     pthread_mutex_lock(lock_);
24   }
25 
~AutoLock()26   ~AutoLock() {
27     Unlock();
28   }
29 
Unlock()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