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