Home | History | Annotate | Download | only in sdk_util
      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