Home | History | Annotate | Download | only in synchronization
      1 // Copyright (c) 2011 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 // This file is used for debugging assertion support.  The Lock class
      6 // is functionally a wrapper around the LockImpl class, so the only
      7 // real intelligence in the class is in the debugging logic.
      8 
      9 #if !defined(NDEBUG)
     10 
     11 #include "base/synchronization/lock.h"
     12 #include "base/logging.h"
     13 
     14 namespace base {
     15 
     16 Lock::Lock() : lock_() {
     17   owned_by_thread_ = false;
     18   owning_thread_id_ = static_cast<PlatformThreadId>(0);
     19 }
     20 
     21 void Lock::AssertAcquired() const {
     22   DCHECK(owned_by_thread_);
     23   DCHECK_EQ(owning_thread_id_, PlatformThread::CurrentId());
     24 }
     25 
     26 void Lock::CheckHeldAndUnmark() {
     27   DCHECK(owned_by_thread_);
     28   DCHECK_EQ(owning_thread_id_, PlatformThread::CurrentId());
     29   owned_by_thread_ = false;
     30   owning_thread_id_ = static_cast<PlatformThreadId>(0);
     31 }
     32 
     33 void Lock::CheckUnheldAndMark() {
     34   DCHECK(!owned_by_thread_);
     35   owned_by_thread_ = true;
     36   owning_thread_id_ = PlatformThread::CurrentId();
     37 }
     38 
     39 }  // namespace base
     40 
     41 #endif  // NDEBUG
     42